#pragma预处理命令

来源:互联网 发布:位面淘宝txt八零 编辑:程序博客网 时间:2024/05/21 11:21

#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_seg,

pointers_to_members,vtordisp仅被C++编译器支持。

 

       以下是常用的pragma指令的详细解释。

1.#pragma once。保证所在文件只会被包含一次,它是基于磁盘文件的,而#ifndef则是基于宏的。

 

2.#pragma warning。允许有选择性的修改编译器的警告消息的行为。有如下用法:

#pragma warning(disable:4507 34; once:4385; error:164) 等价于:   

#pragma warning(disable:4507 34) // 不显示4507和34号警告信息   

#pragma warning(once:4385)       // 4385号警告信息仅报告一次   

#pragma warning(error:164)       // 把164号警告信息作为一个错误

#pragma warning(default:176)     // 重置编译器的176号警告行为到默认状态 

同时这个pragma warning也支持如下格式,其中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)。

0 0