#pragma 预处理指令详解
来源:互联网 发布:网络支付的规模 编辑:程序博客网 时间:2024/06/05 20:05
在所有的预处理指令中,#pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。 其格式一般为: #pragma para , 其中para为参数,下面来看一些常用的参数。 (1)message 参数 message参数是我最喜欢的一个参数,它能够在编译信息输出窗口中输出相应的信息,这对于源代码信息的控制是非常重要的。其使用方法为: (2)另一个使用得比较多的pragma参数是code_seg 格式如: (3)#pragma once (比较常用) 只要在头文件的最开始加入这条指令就能够保证头文件被编译一次,这条指令实际上在VC6中就已经有了,但是考虑到兼容性并没有太多的使用它。 表示预编译头文件到此为止,后面的头文件不进行预编译。BCB可以预编译头文件以加快链接的速度,但如果所有头文件都进行预编译又可能占太多磁盘空间,所以使用这个选项排除一些头文件。 表示把*.dfm文件中的资源加入工程。*.dfm中包括窗体外观的定义。 同时这个pragma warning 也支持如下格式:
该指令将一个注释记录放入一个对象文件或可执行文件中。 例如,对循环优化功能: 有时,程序中会有些函数会使编译器发出你熟知而想忽略的警告, 如“Parameter xxx is never used in function xxx”,可以这样: 每个编译器对#pragma的实现不同,在一个编译器中有效在别的编译器中几乎无效。可从编译器的文档中查看。
Win32平台下的微软C编译器(cl.exe for 80x86)在默认情况下采用如下的对齐规则: Linux下的GCC奉行的是另外一套规则(在资料中查得,并未验证,如错误请指正): ANSI C规定一种结构类型的大小是它所有字段的大小以及字段之间或字段尾部的填充区大小之和。
vc6中的编译选项有 /Zp[1|2|4|8|16] ,/Zp1表示以1字节边界对齐,相应的,/Zpn表示以n字节边界对齐。n字节边界对齐的意思是说,一个成员的地址必须安排在成员的尺寸的整数倍地址上或者是n的整数倍地址上,取它们中的最小值。也就是: 实际上,1字节边界对齐也就表示了结构成员之间没有空洞。
该指令指定结构和联合成员的紧凑对齐。而一个完整的转换单元的结构和联合的紧凑对齐由/Zp 选项设置。紧凑对齐用pack编译指示在数据说明层设置。该编译指示在其出现后的第一个结构或联合说明处生效。该编译指示对定义无效。 当你使用#pragma pack ( n ) 时, 这里n 为1、2、4、8 或16。 第一个结构成员之后的每个结构成员都被存储在更小的成员类型或n 字节界限内。如果你使用无参量的#pragma pack, 结构成员被紧凑为以/Zp 指定的值。该缺省/Zp 紧凑值为/Zp8 。
若不同的组件使用pack编译指示指定不同的紧凑对齐, 这个语法允许你把程序组件组合为一个单独的转换单元。带push参量的pack编译指示的每次出现将当前的紧凑对齐存储到一个内部编译器堆栈中。
在vc6中栈的对齐方式不受结构成员对齐选项的影响。它总是保持对齐,而且对齐在4字节边界上。
原作者:beibei 发表于 2006-12-5 15:33:00 |
- #pragma 预处理指令详解
- #pragma 预处理指令详解
- #pragma 预处理指令详解
- #pragma 预处理指令详解
- #pragma 预处理指令详解
- #pragma 预处理指令详解
- #pragma预处理指令详解
- #pragma预处理指令详解
- #pragma 预处理指令详解- -
- #pragma 预处理指令详解
- #pragma 预处理指令详解
- #pragma 预处理指令详解
- #pragma 预处理指令详解
- #pragma 预处理指令详解
- #pragma 预处理指令详解
- #pragma 预处理指令详解
- #pragma 预处理指令详解
- #pragma 预处理指令详解
- BCP导入文件是遇到的问题(在 BCP 数据文件中遇到的意外的 EOF)
- 数学概念之最大公约数!!哎~都不知道这些东西原来这么有用……
- Webservice,基于Axis的最佳实践。
- OPTA 7模式测试说明
- 面向对象的邮件解析器的设计与实现
- #pragma 预处理指令详解
- Linux定时任务系统 Cron 入门
- SQL查询优化效率
- struct sigaction 和信号处理函数的一些说明
- ant在eclipse下出错
- 实地盘点(Physical Inventory)概览
- MySql与MsSql 语法区别
- WOA与SOA之争
- ADO封装类 Carlos Antollini