C++#pragma预处理命令资料.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
#pragma预处理命令 #pragma可以说是C++中最复杂的预处理指令了,下面是最常用的几个#pragma指令: #pragma comment(lib,XXX.lib) 表示链接XXX.lib这个库,和在工程设置里写上XXX.lib的效果一样。 #pragma comment(linker,/ENTRY:main_function) 表示指定链接器选项/ENTRY:main_function #pragma once 表示这个文件只被包含一次 #pragma warning(disable:4705) 表示屏蔽警告4705 ????? C和C++程序的每次执行都支持其所在的主机或操作系统所具有的一些独特的特点。例如,有些程序需要精确控制数据存放的内存区域或控制某个函数接收的参数。#pragma为编译器提供了一种在不同机器和操作系统上编译以保持C和C++完全兼容的方法。#pragma是由机器和相关的操作系统定义的,通常对每个编译器来说是不同的。 如果编译器遇到不认识的pragma指令,将给出警告信息,然后继续编译。Microsoft C and C++ 的编译器可识别以下指令:alloc_text, auto_inline,bss_seg,check_stack,code_seg,comment,component,conform,const_seg,data_seg,deprecated, fenv_access,float_control,fp_contract,function,hdrstop,include_alias,init_seg,inline_depth,inline_recursion,intrinsic, make_public,managed,message,omp,once,optimize,pack,pointers_to_members,pop_macro,push_macro,region, endregion,runtime_checks,section,setlocale,strict_gs_check,unmanaged,vtordisp,warning。其中conform,init_segpointers_to_members,vtordisp仅被C++编译器支持。 ?????? 以下是常用的pragma指令的详细解释。 1.#pragma once。保证所在文件只会被包含一次,它是基于磁盘文件的,而#ifndef则是基于宏的。 2.#pragma warning。允许有选择性的修改编译器的警告消息的行为。有如下用法: #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.#pragma hdrstop。表示预编译头文件到此为止,后面的头文件不进行预编译。BCB可以预编译头文件以 加快链接的速度,但如果所有头文件都进行预编译又可能占太多磁盘空间,所以使用这个选项排除一些头文 件。 4.#pragma message。在标准输出设备中输出指定文本信息而不结束程序运行。用法如下: #pragma message(消息文本)。当编译器遇到这条指令时就在编译输出窗口中将“消息文本”打印出来。 5.#pragma data_seg。一般用于DLL中,它能够设置程序中的初始化变量在obj文件中所在的数据段。如果未指定参数,初始化变量将放置在默认数据段.data中,有如下用法: #pragma data_seg(Shared) // 定义了数据段Shared,其中有两个变量a和b int a = 0; // 存储在数据段Shared中 int b; // 存储在数据段.bss中,因为没有初始化 #pragma data_seg() // 表示数据段Shared结束,该行代码为可选的 对变量进行专门的初始化是很重要的,否则编译器将把它们放在普通的未初始化数据段中而不是放在shared中。如上述的变量b其实是放在了未初始化数段.bss中。 #pragma data_seg(Share

文档评论(0)

希望之星 + 关注
实名认证
内容提供者

我是一名原创力文库的爱好者!从事自由职业!

1亿VIP精品文档

相关文档