预处理-分节6(#pragma 下)

#pragma code_seg
另一个使用得比较多的pragma 参数是code_seg。格式如: #pragma code_seg( ["section-name"[,"section-class"] ] )

它能够设置程序中函数代码存放的代码段,当我们开发驱动程序的时候就会使用到它。

#pragma once
#pragma once (比较常用)
只要在头文件的最开始加入这条指令就能够保证头文件被编译一次,这条指令实际上在 Visual C++6.0 中就已经有了,但是考虑到兼容性并没有太多的使用它。

#pragma once
#pragma once (比较常用)
只要在头文件的最开始加入这条指令就能够保证头文件被编译一次,这条指令实际上在 Visual C++6.0 中就已经有了,但是考虑到兼容性并没有太多的使用它。

#pragma hdrstop
#pragma hdrstop 表示预编译头文件到此为止,后面的头文件不进行预编译。BCB 可以 预编译头文件以加快链接的速度,但如果所有头文件都进行预编译又可能占太多磁盘空间, 所以使用这个选项排除一些头文件。
有时单元之间有依赖关系,比如单元A 依赖单元B,所以单元B 要先于单元A 编译。 你可以用#pragma startup 指定编译优先级,如果使用了#pragma package(smart_init) ,BCB 就会根据优先级的大小先后编译。

#pragma resource
#pragma resource "*.dfm"表示把*.dfm 文件中的资源加入工程。*.dfm 中包括窗体 外观的定义。

#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 也支持如下格式: #pragma warning( push [ ,n ] ) #pragma warning( pop )
这里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)。

一切改动取消。例如: #pragma warning( push )
#pragma warning( disable : 4705 ) #pragma warning( disable : 4706 ) #pragma warning( disable : 4707 ) //.......
#pragma warning( pop )
在这段代码的最后,重新保存所有的警告信息(包括4705,4706 和4707)。

#pragma pack
这里重点讨论内存对齐的问题和#pragma pack()的使用方法。 什么是内存对齐? 先看下面的结构: struct TestStruct1 {
char c1; short s; char c2; int i; };
假设这个结构的成员在内存中是紧凑排列的,假设c1 的地址是0,那么s 的地址就应该 是1,c2 的地址就是3,i 的地址就是4。也就是c1 地址为00000000, s 地址为00000001, c2 地址为00000003, i 地址为00000004。
可是,我们在Visual C++6.0 中写一个简单的程序: struct TestStruct1 a;
printf("c1 %p, s %p, c2 %p, i %p\n",
(unsigned int)(void*)&a.c1 - (unsigned int)(void*)&a, (unsigned int)(void*)&a.s - (unsigned int)(void*)&a, (unsigned int)(void*)&a.c2 - (unsigned int)(void*)&a, (unsigned int)(void*)&a.i - (unsigned int)(void*)&a); 运行,输出:
c1 00000000, s 00000002, c2 00000004, i 00000008。 为什么会这样?这就是内存对齐而导致的问题。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值