#pragma的常用方法

阅读数:80 评论数:0

跳转到新版页面

分类

C/C++

正文

一、#pragma once

指定该文件在编译源代码文件时仅由编译器包含一次,和使用预处理宏定义来避免多次包含文件的效果相同。

#pragma once

// 头文件内容
class MyClass {
    // 类定义
};

二、#pragma message(messageString)

不中断编译的情况下,发送一个字符串文字到标准输出,messageString参数可以是扩展到字符串的宏。

三、#pragma warning (...)

#pragma warning( warning-specifier : warning-number-list [,warning-specifier : warning-number-list...] )

#pragma warning( push[ , n ] )    
#pragma warning( pop )

1、warning-specifier

1,2,3,4 指定告警级别
default  
disable 不发出指定的告警信息
error 将指定的告警报告为错误
once 只显示指定消息一次
suppress 禁用下一行的指定告警

示例

#pragma warning( disable : 4507 34; once : 4385; error : 164 )   //这1行跟下面3行效果一样

#pragma warning( disable : 4507 34 ) 	//不发出4507和34警告,即有4507和34警告时不显示
#pragma warning( once : 4385 )  		//4385警告信息只报告一次
#pragma warning( error : 164 )  		//把164警告信息作为一个错误

2、warning push pop

warning(push) 指令保存当前告警设置

warning(push,n)保存当前告警设置,同时将全局警告级别设置为n

warning(pop)指令用于恢复之前保存的告警设置。

四、#pragma comment

#pragma comment(comment-type [,"commentstring"])

1、comment-type

(1)compiler

将编译器的名称和版本号置于对象文件中。

(2)exestr

将commentstring置于可执行文件中,加载可执行文件时, 不会将字符串加载到内存中,但是可以使用在文件中查找可打印字符串。

(3)lib(这个最常用)

将库搜索记录置于对象文件中。

#pragma  comment(lib, "comctl32.lib")
#pragma comment( lib, "mysql.lib" )

(4)linker

将链接器选项置于对象文件中。

(5)user

将一般注释置于对象文件中。

五、#pragma pack([show] [push|pop] [,identifier],n )

改变编译器的内存对齐方式。

1. #pragma pack(show)     以警告信息的形式显示当前字节对齐的值.
2. #pragma pack(n)        将当前字节对齐值设为 n .
3. #pragma pack()         将当前字节对齐值设为默认值(通常是8) .
4. #pragma pack(push)     将当前字节对齐值压入编译栈栈顶.
5. #pragma pack(pop)      将编译栈栈顶的字节对齐值弹出并设为当前值.
6. #pragma pack(push, n)  先将当前字节对齐值压入编译栈栈顶, 然后再将 n 设为当前值.
7. #pragma pack(pop, n)   将编译栈栈顶的字节对齐值弹出, 然后丢弃, 再将 n 设为当前值.

8. #pragma pack(push, identifier)        将当前字节对齐值压入编译栈栈顶, 然后将栈中保存该值的位置标识为 identifier .
10. #pragma pack(pop, identifier)        将编译栈栈中标识为 identifier 位置的值弹出, 并将其设为当前值. 注意, 如果栈中所标识的位置之上还有值, 那会先被弹出并丢弃.
11. #pragma pack(push, identifier, n)    将当前字节对齐值压入编译栈栈顶, 然后将栈中保存该值的位置标识为 identifier, 再将 n 设为当前值.
12. #pragma pack(pop, identifier, n)     将编译栈栈中标识为 identifier 位置的值弹出, 然后丢弃, 再将 n 设为当前值. 注意, 如果栈中所标识的位置之上还有值, 那会先被弹出并丢弃.
   
注意: 如果在栈中没有找到 pop 中的标识符, 则编译器忽略该指令, 而且不会弹出任何值.

 




相关推荐

第1章 认识对象 1.面向对象分析(object-oriented analysis,OOA)的主要任务是分析问题域中的对象、对象之间的关系,然后构造出该问题域的分析模型。分析

第一章 C++初步认识 C++对C的&ldquo;增强&rdquo;,表现在两个方面: (1)在原来面向过程的机制基础上,对C语言的功能做了不少扩展 <p

有一种特殊的指针叫做成员指针,它们通常指向一个类的成员,而不是对象中成员的特定实例。 <span styl

C++标准每5年会有一个新版本,1998年的C++98、2003年的C++03、2007年的C++TR1、2011年的C++11. 转换操作符 static_ca

组织和策略问题第0条 不要拘泥于小节(了解哪此东本西不应该标准化) 编程规范不应施加个人喜好或者过时的做法。第1条 在高警告级别干净利落地进行编译

它的规则就是当编译器对无限定域的函数调用进行名字查找时,除了当前名字空间域以外,也会把<span style="colo

1、C++版本更迭 <t

1、转换操作 (1)static_cast 将一个值以符合逻辑的方式转型。这个可以看作是&ldquo;利用原值重建一个临时对象,并在设立初值时使用型别转换&rdq

一、概述 GCC一般包括预处理、编译、组装和链接。GCC的运行一般是调用命令gcc,在cross-compiling时使用machine-gcc或machine-gcc-version,在使用c++时

一、概念 所谓的预编译头文件就是把工程中不会经常改变的代码预先编译好放在一个文件里(通过是以.pch为扩展名Precompiled heade