c/c++ #pragma 预处理指令
程序员文章站
2022-05-04 23:31:36
...
/*
#pragma
一般格式: #pragma Para,其中Para为参数。
message参数,code_seg,#pragma once,#pragma hdrstop,#pragma resource,
#pragma warning,#pragma comment,#pragma disable,#pragma data_seg,
#pragma region
*/
/*
message参数
message参数能够在编译信息输出窗口中输出相应的信息。
#pragma message("消息文本")
当编译器遇到这条指令时就会在编译输出窗口中将消息文本打印出来,如果在IDE模式下编译,则是显示在
output窗口。
code_seg
#pragma code_seg(["section-name"[,"section-class"]])
它能够设置程序中函数代码存放的代码段,当我们开发驱动程序的时候就会使用到它。
#pragma once
只要在头文件的最开始加入这条指令就能保证头文件被编译一次,这条指令实际上在VC6中就有了,但是考虑
到兼容性并没有太多使用。
#pragma once是编译相关,就是说这个编译系统上能用,但在其他编译系统不一定可以,也就是说移植性差,
不过现在基本上已经是每个编译器都有这个定义了。
#ifndef,#define,#endif这个是C++语言相关,这是C++语言中的宏定义,通过宏定义避免文件多次编译。
所以在所有支持C++语言的编译器上都是有效的,如果写的程序要跨平台,最好使用这种方式。
#pragma hdrstop
#pragma hdrstop表示预编译头文件到此为止,后面的头文件不进行预编译。BCB可以预编译头文件以加快链接的速度,
但如果所有头文件都进行预编译又可能占太多磁盘空间,所以使用这个选项排除一些头文件。
有时单元之间有依赖关系,比如单元A依赖单元B,所以单元B要先于单元A编译。你可以用#pragma startup指定编译优先级,
如果使用了#pragma package(smart_init),BCB就会根据优先级的大小先后编译。
#pragma resource
#pragma resource "*.dfm"表示把*.dfm文件中的资源加入工程。*.dfm中包括窗体外观的定义。
#pragma warning
#pragma warning(disable:450734;once:4385;error:164)
等价于:
#pragma warning(disable:450734)//不显示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)。
*/
#define _X86 86
#ifdef _X86
#pragma message("_X86 macro activated!") //当定义了这个宏之后,应用程序在编译时就会在编译输出窗口显示_X86 macro activated!
#endif#include <iostream>
using namespace std;
int main()
{
return 0;
}