#pragma的用法
"#pragma的用法" `#pragma` 指令是 C 和 C++ 编译器中的一种预处理指令,它可以用来设定编译器的状态或者指示编译器完成一些特定的动作。下面是 `#pragma` 指令的一些常用参数和用法: (1) `message` 参数 `message` 参数能够在编译信息输出窗口中输出相应的信息,这对于源代码信息的控制是非常重要的。其使用方法为: ```c #pragma message("消息文本") ``` 当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来。 例如,当我们在程序中定义了许多宏来控制源代码版本的时候,我们自己有可能都会忘记有没有正确的设置这些宏,此时我们可以用这条指令在编译的时候就进行检查。 ```c #ifdef _X86 #pragma message("_X86 macro activated!") #endif ``` 当我们定义了 `_X86` 这个宏以后,应用程序在编译时就会在编译输出窗口里显示“_X86 macro activated!”。我们就不会因为不记得自己定义的一些特定的宏而抓耳挠腮了。 (2) `code_seg` 参数 `code_seg` 参数能够设置程序中函数代码存放的代码段,当我们开发驱动程序的时候就会使用到它。其格式为: ```c #pragma code_seg(["section-name"[,"section-class"]]) ``` 例如: ```c #pragma code_seg(".icode") ``` 这将将当前函数代码存放到 `.icode` 段中。 (3) `once` 参数 `once` 参数是 `#pragma` 指令中最常用的一个参数,只要在头文件的最开始加入这条指令就能够保证头文件被编译一次。 ```c #pragma once ``` 这条指令实际上在 VC6 中就已经有了,但是考虑到兼容性并没有太多的使用它。 (4) `hdrstop` 参数 `hdrstop` 参数表示预编译头文件到此为止,后面的头文件不进行预编译。 ```c #pragma hdrstop ``` BCB 可以预编译头文件以加快链接的速度,但如果所有头文件都进行预编译又可能占太多磁盘空间,所以使用这个选项排除一些头文件。 (5) `resource` 参数 `resource` 参数能够将 `*.dfm` 文件中的资源加入工程。 ```c #pragma resource "*.dfm" ``` `*.dfm` 中包括窗体外观的定义。 (6) `warning` 参数 `warning` 参数能够控制警告信息的输出。 ```c #pragma warning(disable : 4507 34; once : 4385; error : 164) ``` 等价于: ```c #pragma warning(disable:4507 34) // 不显示 4507 和 34 号警告信息 #pragma warning(once:4385) // 4385 号警告信息仅报告一次 #pragma warning(error:164) // 把 164 号警告信息作为一个错误 ``` 同时这个 `pragma warning` 也支持如下格式: ```c #pragma warning(push [ ,n ] ) #pragma warning(pop ) ``` 这里 `n` 代表一个警告等级(1---4)。 `#pragma warning(push)` 保存所有警告信息的现有的警告状态。 `#pragma warning(push, n)` 保存所有警告信息的现有的警告状态,并且把全局警告等级设定为 `n`。 `#pragma warning(pop)` 向栈中弹出最后一个警告信息,在入栈和出栈之间所作的一切改动取消。 例如: ```c #pragma warning(push ) #pragma warning(disable : 4705 ) #pragma warning(disable : 4706 ) #pragma warning(disable : 4707 ) //....... #pragma warning(pop ) ``` 在这段代码的重新保存所有的警告信息(包括 4705,4706 和 4707)。