#pragma的常用方法
阅读数:165 评论数: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++标准每5年会有一个新版本,1998年的C++98、2003年的C++03、2007年的C++TR1、2011年的C++11.
转换操作符
static_ca
组织和策略问题第0条 不要拘泥于小节(了解哪此东本西不应该标准化)
编程规范不应施加个人喜好或者过时的做法。第1条 在高警告级别干净利落地进行编译
一、概述
GCC一般包括预处理、编译、组装和链接。GCC的运行一般是调用命令gcc,在cross-compiling时使用machine-gcc或machine-gcc-version,在使用c++时