打印

#pragma用法

[复制链接]
1275|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhiyy|  楼主 | 2016-5-14 23:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
命令#pragma 为实现时定义的命令,它允许向编译程序传送各种指令。
#pragma 的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma 指令对每个编译器给出了一个方法,在保持与 C 和 C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。
其格式一般为: #Pragma Para
沙发
bboo| | 2016-5-14 23:36 | 只看该作者
#pragma message(“消息文本”)
当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来。
当我们在程序中定义了许多宏来控制源代码版本的时候, 我们自己有可能都会忘记有没有正确的
设置这些宏,此时我们可以用这条指令在编译的时候就进行检查。假设我们希望判断自己
有没有在源代码的什么地方定义了_X86 这个宏可以用下面的方法
#ifdef _X86
#pragma message(“_X86 macro activated!”)
#endif
当我们定义了_X86 这个宏以后,应用程序在编译时就会在编译输出窗口里显示“_
X86 macro activated!”。我们就不会因为不记得自己定义的一些特定的宏而抓耳挠腮了。

使用特权

评论回复
板凳
zhiyy|  楼主 | 2016-5-14 23:36 | 只看该作者
message 参数。
Message 参数能够在编译信息输出窗口中输出相应的信息,这对于源代码信息的控制是非常重要的。

使用特权

评论回复
地板
dianz| | 2016-5-14 23:36 | 只看该作者
code_seg 参数。
格式如:
#pragma code_seg( ["section-name"[,"section-class"] ] )
它能够设置程序中函数代码存放的代码段,当我们开发驱动程序的时候就会使用到它。

使用特权

评论回复
5
bboo| | 2016-5-14 23:37 | 只看该作者
#pragma once (比较常用)
只要在头文件的最开始加入这条指令就能够保证头文件被编译一次。这条指令实际上在 VC6 中
就已经有了,但是考虑到兼容性并没有太多的使用它。

使用特权

评论回复
6
dianz| | 2016-5-14 23:37 | 只看该作者
#pragma hdrstop
表示预编译头文件到此为止,后面的头文件不进行预编译。BCB 可以预编译头文件以加快链接的速度,但如果所有头文件都进行预编译又可能占太多磁盘空间,所以使用这个选项排除一些头文件。

使用特权

评论回复
7
bboo| | 2016-5-14 23:37 | 只看该作者
有时单元之间有依赖关系,比如单元 A 依赖单元 B,所以单元 B 要先于单元 A 编译。你可以用#pragma startup 指定编译优先级,如果使用了#pragma package(smart_init) ,BCB 就会根据优先级的大小先后编译。

使用特权

评论回复
8
dianz| | 2016-5-14 23:38 | 只看该作者
#pragma resource "*.dfm"
表示把*.dfm 文件中的资源加入工程。*.dfm 中包括窗体外观的定义。

使用特权

评论回复
9
bboo| | 2016-5-14 23:38 | 只看该作者
#pragma warning( disable : 4507 34; once : 4385; error : 164 )
等价于:
#pragma warning(disable:4507 34) /* 不显示 4507 和 34 号警告信息。如果编译时总是出现 4507
号警告和 34 号警告, 而认为肯定不会有错误,可以使用这条指令。*/
#pragma warning(once:4385) // 4385 号警告信息仅报告一次
#pragma warning(error:164) // 把 164 号警告信息作为一个错误。

使用特权

评论回复
10
dianz| | 2016-5-14 23:38 | 只看该作者
同时这个 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)

使用特权

评论回复
11
bboo| | 2016-5-14 23:39 | 只看该作者
pragma comment(...)
该指令将一个注释记录放入一个对象文件或可执行文件中。
常用的 lib 关键字,可以帮我们连入一个库文件。

使用特权

评论回复
12
dianz| | 2016-5-14 23:39 | 只看该作者
progma pack(n)
指定结构体对齐方式。#pragma pack(n)来设定变量以 n 字节对齐方式。
n 字节对齐就是说变量存放的起始地址的偏移量有两种情况:
第一、如果 n 大于等于该变量所占用的字节数,那么偏移量必须满足默认的对齐方式,
第二、如果 n 小于该变量的类型所占用的字节数,那么偏移量为 n 的倍数,不用满足默认的对
齐方式。

使用特权

评论回复
13
bboo| | 2016-5-14 23:39 | 只看该作者
结构的总大小也有个约束条件,分下面两种情况:如果 n 大于所有成员变量类型所占用的字节数,那么结构的总大小必须为占用空间最大的变量占用的空间数的倍数; 否则必须为 n 的倍数。下面举例说明其用法。
#pragma pack(push) //保存对齐状态
#pragma pack(4)//设定为 4 字节对齐
struct test
{
char m1;
double m4;
int m3;
};
#pragma pack(pop)//恢复对齐状态为测试该功能,可以使用 sizeof()测试结构体的长度!

使用特权

评论回复
14
baimiaocun2015| | 2016-5-15 12:18 | 只看该作者
#pragma 的作用是设定编译器的状态或者是指示编译器完成一些特定的动作,这个在GD32 开发过程中我用的比较少。

使用特权

评论回复
15
zb0830| | 2016-5-15 13:16 | 只看该作者
这个相对用的少点

使用特权

评论回复
16
angerbird| | 2016-5-16 22:49 | 只看该作者
dianz 发表于 2016-5-14 23:36
code_seg 参数。
格式如:
#pragma code_seg( ["section-name"[,"section-class"] ] )

这个我在开发程序代码中用的少。。

使用特权

评论回复
17
firstblood| | 2016-5-18 19:40 | 只看该作者
#pragma 的用法非常多的,我一般用的少很。。

使用特权

评论回复
18
vibra2016| | 2016-6-27 21:54 | 只看该作者
3program的用法在编写程序的过程中还是需要多注意的。

使用特权

评论回复
19
zb0830| | 2016-6-28 07:28 | 只看该作者
这个宏我用的比较少

使用特权

评论回复
20
comeon201208| | 2016-6-28 22:00 | 只看该作者
#pragma 的作用是设定编译器的状态或者是指示编译器完成一些特定的动作,这个用法的跟#define的还是有一定的区别的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

32

主题

399

帖子

1

粉丝