#pragma 的几种用法

原创 2007年09月15日 17:47:00


预编译指令#pragma有很多种用法,我敢保证很多程序员即使是一辈子也不会碰到其中的有些用法,是

的,他们的确很偏僻,我们也没有用他们的需求。所以,本文不会面面俱到,只是把几种常用的几种汇总

了一下。

1. #pragma once
保证头文件只被include一次,等同于
#ifndef _X_H
#define _X_H
...
#endif //_X_H

2.#pragma comment
原形是#pragma comment( "comment-type" [, commentstring] ),把comment recode放入目标文件或可

执行文件。"comment-type"有五种,其中lib比较常用:#pragma comment(lib,"d3d9x") 在连接时就会把

d3d9x.lib报含到项目中来。其实在IDE中也可以手动的设置把lib文件包含进来。

3.#pragma warning
可以对编译的warning做一些处理.
比如当把float 转成 int时会有一个warning.看到warning总归不爽,而且有些warning心知肚明,肯定不

会引起什么问题,这时候:
#pragma warning(disable:4244)
可以把该警告屏蔽掉.#pragma warning的作用域是本文件,如果是头文件,则会影响到包含它的模块,确保

你的使用不会影响到别人.所以最好及时地恢复warning
#pragma warning( push )
#pragma warning( disable : 4705 )
#pragma warning( disable : 4706 )
// Some code
#pragma warning( pop )
也可以
#pragma warning( disable : 4705 )
#pragma warning( disable : 4706 )
// Some code
#pragma warning( default:  4705 )
#pragma warning( default:  4705 )


4.#pragma pack
c/c++的class,struct,union默认情况下会在字,双字,四字边界对齐.有时候需要按我们的方式进行对齐,

比如让网络包更紧蹙些.
#pragma pack(push,1)
 struct A{                                     //现在sizeof(A) 等于5;默认情况下是8;
 int i;
 char c;
};
#pragma pack(pop)  使用时跟warning一样,也要注意作用域问题。记得以前有位仁兄在头文件中改了对

齐方式,没有及时地设回去。这种bug很讨厌,会间歇性地莫名其妙地引起程序崩溃,千万要小心。 

CX51 用户手册----REGISTERBANK伪指令

声明: 1、本翻译仅供个人学习使用,本人没有提供技术支持的义务,也不承担由此引发的任何后果。 2、请勿用于商业用途。 3、英文来自:http://www.keil.com/suppo...
  • whb_mcu
  • whb_mcu
  • 2012年07月23日 14:53
  • 520

关于如何利用Keil C实现51单片机中断功能(interrupt、using关键字的用法)

C语言在8051单片机上的扩展(interrupt、using关键字的用法) 直接访问寄存器和端口  定义 sfr P0 0x80 sfr P1 0x81 sfr ADCON; 0xDE ...
  • leizi_chn
  • leizi_chn
  • 2012年02月09日 09:50
  • 13564

如何利用keil C实现单片机中断功能(interrupt,using关键字的用法)

C语言在8051单片机上的扩展(interrupt、using关键字的用法)直接访问寄存器和端口 定义sfr P0 0x80 sfr P1 0x81 sfr ADCON; 0xDEsbit EA  0...
  • qp_12
  • qp_12
  • 2017年01月22日 00:11
  • 1115

C语言在8051单片机上的扩展(interrupt、using关键字的用法)

C语言在8051单片机上的扩展(interrupt、using关键字的用法) 直接访问寄存器和端口定义sfr   P0 0x80       sfr     P1 0x81       sfr    ...
  • love_maomao
  • love_maomao
  • 2010年05月18日 13:46
  • 3899

#error #warning 和 #line 用法分析

 #error #warning #line 用法分析
  • qq_36016407
  • qq_36016407
  • 2017年02月09日 14:38
  • 539

【C语言复习(十)】#error与#warning、#line、#与##的简单使用

1、#error的用法 #error编译指示字用于生成一个编译错误消息,并让预编译器停止编译,这个错误消息是开发人员自定义的。 用法:#error Message  (Message不需要用双引号...
  • CMbug
  • CMbug
  • 2014年06月12日 21:13
  • 1651

#pragma warning 启用和禁用warning

开发人员可以使用 #pragma 指令将警告作为错误处理;还可以启用或禁用警告,如下面的示例所示: 1.将一个warning作为一个错误 #pragma warning (error: 6...
  • Cashey1991
  • Cashey1991
  • 2011年12月05日 16:38
  • 11815

#pragma指令用法汇总和解析

#pragma指令用法汇总和解析 一. message 参数。 message 它能够在编译信息输出窗  口中输出相应的信息,这对于源代码信息的控制是非常重要的。其使用方法为:  #pragma me...
  • xionghaoaizhangruyun
  • xionghaoaizhangruyun
  • 2014年02月01日 11:36
  • 1912

记录#pragma pack()的问题

在Cortex M0平台上做开发的时候,遇到一个纠结了两三天的问题。 代码添加了PWM马达控制后,继续做USB复合设备。在做好USB复合设备,发现原来的PWM马达控制不起作用了,首先对比了模块的寄存...
  • dndxhej
  • dndxhej
  • 2014年01月28日 17:56
  • 8808

C语言之#pragma pack或者__packed学习

C语言之#pragma pack学习 转自:http://www.cppblog.com/range/archive/2011/07/15/151094.html #pragma pack学...
  • xlhcgd
  • xlhcgd
  • 2015年05月28日 11:47
  • 1146
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:#pragma 的几种用法
举报原因:
原因补充:

(最多只允许输入30个字)