#pragma 用法总结

      现在的编译器中,可以通过命令行参数或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     
**********************************************************************************/    

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值