#pragma预处理指令
May 27th, 2008 by king
在所有编译预处理指令中,#pragma指令是最复杂的,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。它的格式一般为:#pragma para 其中para为参数。下面罗列一些我见到过的参数。
1.message 参数
使用方法:#pragma message(”文本消息”)
作用:当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来。注意:这里的编译输出窗口不是指打印程序输出结果的那个黑黑控制台窗口,而是指IDE下面输出编译信息,例如:给你报编译错误的那个窗口。
2. warning 参数
例如:#pragma warning(diable:4507;once:4385;error:164)
#pragma warning(disable:4507 34) // 不显示4507和34号警告信息
#pragma warning(once:4385) // 4385号警告信息仅报告一次
#pragma warning(error:164) // 把164号警告信息作为一个错误。
同时这个pragma warning 也支持如下格式:
#pragma warning( push [ ,n ] )
#pragma warning( pop )
这里n代表一个警告等级(1~4)。
#pragma warning( push )保存所有警告信息的现有的警告状态。
#pragma warning( push, n)保存所有警告信息的现有的警告状态,并且把全局警告
等级设定为n。
#pragma warning( pop )向栈中弹出最后一个警告信息,在入栈和出栈之间所作的
一切改动取消。例如:
#pragma warning( push )
#pragma warning( disable : 4705 )
#pragma warning( disable : 4706 )
#pragma warning( disable : 4707 )
//…….
#pragma warning( pop )
在这段代码的最后,重新保存所有的警告信息(包括4705,4706和4707)。
3. comment 参数
原型:#pragma comment( comment-type [,”commentstring“] )
该指令将一个注释记录放入一个对象文件或可执行文件中。 常用的comment-type有lib、compiler等。
例如在我的大数运算库里使用的一条指令:#pragma comment(lib,”winmm.lib”),目的就是导入winmm.lib库,连接器能连接这个库,以便能调用该静态库里的函数。
4. pack 参数
有如下几种形式:
#pragma pack() //取消对齐,恢复最原始缺省对齐
#pragma pack(n) /*指定按n字节对齐,其取值为1、2、4、8、16,默认是8,如果这个值比结构体成员的sizeof值小,那么该成员距结构体起始位置的偏移量应该以 此值为准,即是说,结构体成员的偏移量应该取二者的最小值,公式如下:
offsetof( item ) = min( n, sizeof( item )) */
#pragma pack(push) //保存当前对其方式到packing stack
#pragma pack(push,n) 等效于 #pragma pack(push) #pragma pack(n) //n=1,2,4,8,16保存当前对齐方式,设置按n字节对齐
#pragma pack(pop) //packing stack 出栈,并将对其方式设置为出栈的对齐方式