pragma_once及其他PDF版本.pdfVIP

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
pragma_once及其他PDF版本.pdf

#pragma once 及其他 2009-09-09 10:47 pragma 指令简介 在编写程序的时候,我们经常要用到#pragma 指令来设定编译器的状态或者是指示编译 器完成一些特定的动作。 一.message 参数 message 它能够在编译消息输出窗口中输出相应的消息,这对于源代码信息的控制非常 重要的,使用方法为: #pragma message (“消息文本”) 当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来。当我们在程序中定 义了许多宏来控制源代码版本的时候,我们自己有可能都会忘记有没有正确的设置这些宏, 此时我们可以用这条指令在编译的候进行检查,假设我们希望判断自己有没有源代码的什么 地方定义了_X86 这个宏可以用下面的方法: #ifdef _x86 #pragma message(_x86 macro activated!) #endif 当我们定义了_X86 这个宏以后,应用程序在编译时就会在编译输出窗口里显示_x86 macro activated! 。 二. 另一个使用得比较多的#pragma 参数是code_seg 。格式如: #pragma code_seg([[{push|pop},][identifier,]][segment-name][,segment-class]) 该指令用来指定函数在.obj 文件中存放的节,观察OBJ 文件可以使用VC 自带的dumpbin 命令行程序,函数在.obj 文件中默认的存放节 为.text 节 如果code_seg 没有带参数的话,则函数存放在.text 节中 push (可选参数) 将一个记录放到内部编译器的堆栈中,可选参数可以为一个标识符或 者节名 pop(可选参数) 将一个记录从堆栈顶端弹出,该记录可以为一个标识符或者节名 identifier (可选参数) 当使用push 指令时,为压入堆栈的记录指派的一个标识符,当该标 识符被删除的时候和其相关的堆栈中的记录将被弹出堆栈 segment-name (可选参数) 表示函数存放的节名 例如: //默认情况下,函数被存放在.text 节中 void func1() { // stored in .text } //将函数存放在.my_data1 节中 #pragma code_seg(.my_data1) void func2() { // stored in my_data1 } //r1 为标识符,将函数放入.my_data2 节中 #pragma code_seg(push, r1, .my_data2) void func3() { // stored in my_data2 } int main() { } 三. #pragma once (比较常用) 这是一个比较常用的指令,只要在头文件的最开始加入这条指令就能够保证头文件被编 译一次 #pragma once 用来防止某个头文件被多次include,#ifndef ,#define ,#endif 用来防止某 个宏被多次定义。 #pragma once 是编译相关,就是说这个编译系统上能用,但在其他编译系统不一定可以, 也就是说移植性差,不过现在基本上已经是每个编译器都有这个定义了。 #ifndef ,#define,#endif 这个是C++语言相关,这是C++语言中的宏定义,通过宏定义 避免文件多次编译。所以在所有支持C++语言的编译器上都是有效的,如果写的程序要跨平 台,最好使用这种方式 四. #pragma hdrstop 表示预编译头文件到此为止,后面的头文件不进行预编译。 BCB 可以预编译头文件以加快链接的速度,但如果所有头文件都进行预编译又可能占 太多磁盘空间,所以使用这个选项排除一些头文件。 有时单元之间有依赖关系,比如单元A 依赖单元B ,所以单元B 要先于单元A 编译。 你可以用#pragma startup 指定编译优先级, 如果使用了#pragma package(smart_init) ,BCB 就会根据优先级的大小先后编译

文档评论(0)

docinppt + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档