现在的编译器中,可以通过命令行参数或IDE菜单修改编译器的一些设置。#pragma把编译器指令放入源代码中。
例如:可以让编译器支持某Ç标准。
#pragma c9x on
此外的#pragma还有许多其他用途,例如:
1)防止头文件多次编译
@pragma once
/**************************************
1. 在头文件的最开始加入此指令,可以保证头文件只被编译一次;
2. #ifndef,#define,#endif这个是C++语言相关,这是C++语言中的宏定义,通过宏定义避免文件多
次编译。所以在所有支持C++语言的编译器上都是有效的,如果写的程序要跨平台,最好使用这种方式;
***************************************/
2)停止预编译,可以选择性的编译头文件
#pragma hdrstop
/**************************************
1. #pragma hdrstop表示预编译头文件到此为止,后面的头文件不进行预编译。BCB(Borland C++
Builder,Borland 的开发工具)可以预编译头文件以加快链接的速度,但如果所有头文件都进行预编译又可能
占太多磁盘空间,所以使用这个选项排除一些头文件。
2. 有时单元之间有依赖关系,比如单元A依赖单元B,所以单元B要先于单元A编译。你可以用#pragma
startup指定编译优先级,如果使用了#pragma package(smart_init) ,BCB就会根据优先级的大小先后
编译。
***************************************/
3)自定义编译器的警告(警报)信息
#pragma warning(disable:4507 34; once:4385; error:164);
/**************************************
#pragma warning(disable:450734)//不显示4507和34号警告信息
#pragma warning(once:4385)//4385号警告信息仅报告一次
#pragma warning(error:164)//把164号警告信息作为一个错误。
主要用到的警告表示有如下几个:
once: 只显示一次(警告/错误等)消息
default: 重置编译器的警告行为到默认状态
1,2,3,4: 四个警告级别
disable: 禁止指定的警告信息
error: 将指定的警告信息作为错误报告
***************************************/
4)在编译信息输出窗口中输出相应的信息;
// 格式:#pragma message("消息文本"); 当编译器遇到这条指令时就在编译输出窗口中将消息文本打
// 印出来;
// 例如:在源代码版本控制时,作为作者也有可能忘记有没有设置相关宏,因此可以这样做:
#ifdef _VERSION_1.1.0
#pragma message("Hardware Version: _VERSION_1.1.0");
#endif
5)#pragma comment(...)
六 格式:#pragma comment(“comment-type”);
#pragma comment(“comment-type”);
/**********************************************************************************
该指令将一个注释记录放入一个对象文件或可执行文件中,
comment-type(注释类型):可以指定为五种预定义的标识符的其中一种,五种预定义的标识符为:
compiler:
将编译器的版本号和名称放入目标文件中,本条注释记录将被编译器忽略。如果你为该记录类型提供了
commentstring参数,编译器将会产生一个警告。例如:#pragma comment(compiler)
exestr:
将commentstring参数放入目标文件中,在链接的时候这个字符串将被放入到可执行文件中,当操作
系统加载可执行文件的时候,该参数字符串不会被加载到内存中。但是,该字符串可以被dumpbin之类的程
序查找出并打印出来,你可以用这个标识符将版本号码之类的信息嵌入到可执行文件中!
lib:
这是一个非常常用的关键字,用来将一个库文件链接到目标文件中常用的lib关键字,可以帮我们连
入一个库文件。例如: #pragma comment(lib, "user32.lib") ,该指令用来将user32.lib库文
件加入到本工程中。
linker:
将一个链接选项放入目标文件中,你可以使用这个指令来代替由命令行传入的或者在开发环境中设置
的链接选项,你可以指定/include选项来强制包含某个对象,例如:
#pragma comment(linker, "/include:__mySymbol") ,你可以在程序中设置下列链接选项
/DEFAULTLIB
/EXPORT
/INCLUDE
/MERGE
/SECTION
**********************************************************************************/