#pragma是一种预处理指令,作用是设定编译器的状态或者是指示编译器完成一些特定的动作。

其格式一般为:#pragma Para。其中Para为参数。下面是一些常见用法。

1、message

——在编译信息输出窗口中输出相应信息。

例:#ifdef _X86

#pragma message("_X86 macro activated!")

#endif

2、once

——保证头文件只被编译一次

#pragma once与#ifndef / #define / endif 区别:

1)#pragma once与编译相关,移植性差,不过现在基本上每个编译器都有这个定义;

2)#pragma once如果头文件有多份拷贝,不能保证它们不被重复包含;

3)#ifndef / #define / endif 是C++语言相关,所有支持C++语言的编译器都有效,移植性好;

4)#ifndef / #define / endif 通过宏定义避免文件多次编译,这不仅保证同一文件不会被包含多次,也能保证内容完全相同的两个文件不会被不小心同时包含。

3、warning

——修改编译器的警告消息的行为

#pragma warning(push)--保存所有告警信息的现有告警状态

#pragma warning(disable:4507 34)--不显示4507和34号警告信息

#pragma warning(once:4835)--4835号警告信息仅报告一次

#pragma warning(error:164)--把164号警告信息作为一个错误

#pragma warning(disable:4507 34; once:4835; error:164)--综上

#pragma warning(pop)--向栈中弹出最后一个告警信息,在入栈和出栈间所作的一切改动取消

4、comment

——将一个注释记录放入一个对象文件或可执行文件中

指令格式:#pragma comment(comment-type [, "comment-string"])

comment-type是一个预定义标识符,指定注释类型,是compiler、exestr、lib、linker之一;

comment-string是一个为comment-type提供附加信息的字符串。

最常用的是:#pragma comment(lib, "*.lib")--链接指定库

5、pack

——设置字节对齐长度

实际使用规则:结构、联合或类的数据成员,第一个放在偏移为0的地方,以后每个数据成员的对齐,按照#pragma pack指定的数值和这个数据成员自身长度中,比较大的那个进行。但是当前者设置的值等于或超过最长数据成员的长度时,这个值的大小将不产生任何效果。而 结构整体的对齐,则按照结构体中最大的数据成员和#pragma pack指定值之间较小的那个进行。

#pragma pack(show)--以警告信息的形式显示当前字节对齐的值

#pragma pack(push)--将当前字节对齐值压入编译栈栈顶

#pragma pack(n)--将当前字节对齐值设为n

#pragma pack(push, n)--综上两句

#pragma pack(pop)--将编译栈栈顶的字节对齐值弹出并设为当前值

#pragma pack()--将当前字节对齐值设为默认值(通常是8)

#pragma用法的更多相关文章

  1. 汇总#pragma用法

    这几天忙着去复习了,但是心理总是不踏实,不到实验室里就觉得一天的生活变了个样,现在还是晚上来这里“搞起”吧,白天还是在复习准备考试.因为要开始学习freescale,准备明年的比赛了,觉得是时候开始搞 ...

  2. [C++] 头文件中的#ifndef,#define,#endif以及#pragma用法

    想必很多人都看过“头文件中用到的 #ifndef/#define/#endif 来防止该头文件被重复引用”.但是是否能理解“被重复引用”是什么意思?头文件被重复引用了,会产生什么后果?是不是所有的头文 ...

  3. c++ 一些随笔

    1. A region of source code where any use of the unqualified name (that is, as a plain identifier) re ...

  4. #pragma GCC system_header用法

    在看公司公共库的头文件中发现了:#pragma GCC system_header一行,以前没有见过这种用法,在网上查了一下,解释如下: 从#pragma GCC system_header直到文件结 ...

  5. #pragma once用法总结

    1.#pragmaonce这个宏有什么作用? 为了避免同一个头文件被包含(include)多次,C/C++中有两种宏实现方式:一种是#ifndef方式:另一种是#pragma once方式. 在能够支 ...

  6. C++ pragma once 与 ifndef 用法区别

    #pragma once 与 #ifndef 的作用 (1)在C/C++中,在使用预编译指令#include的时候,为了防止重复引用造成二义性. (2)在能够支持这两种方式的编译器上,二者并没有太大的 ...

  7. 关于pragma pack的用法(一)

    一个很重要的参数#pragma pack(n) 数据边界对齐方式:以如下结构为例: struct {                    char a;                    WOR ...

  8. IOS笔记 #pragma mark的用法

    简单的来说就是为了方便查找和导航代码用的. 下面举例如何快速的定位到我已经标识过的代码. #pragma mark 播放节拍器 - (void) Run:(NSNumber *)tick { //.. ...

  9. pragma pack(非常有用的字节对齐用法说明)

    强调一点: #pragma pack(4) typedef struct { char buf[3]; word a; }kk; #pragma pack() 对齐的原则是min(sizeof(wor ...

随机推荐

  1. virtualvenv+django+uWSGI+nginx 部署 踩坑记录

    原创博文 转载请注明出处! uwsgi: unrecognized option '--http:8089' uwsgi: unrecognized option '--http' uwsgi trk ...

  2. 201621123080《Java程序设计》第十一周学习总结

    201621123080<Java程序设计>第十一周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 ...

  3. 关于host,nslookup,dig 的安装

    host,nslookup,dig依赖bind包,所以先看一下系统有没有bind包 命令如下:rpm -qa |grep bind 如果没有或者版本太低请升级安装 命令是:yum install bi ...

  4. HDU - 1864 最大报销额 (背包)

    题意: 现有一笔经费可以报销一定额度的发票.允许报销的发票类型包括买图书(A类).文具(B类).差旅(C类),要求每张发票的总额不得超过1000元,每张发票上,单项物品的价值不得超过600元.现请你编 ...

  5. CodeForces - 948C Producing Snow(优先队列)

    题意: n天. 每天你会堆一堆雪,体积为 v[i].每天都有一个温度 t[i] 所有之前堆过的雪在第 i 天体积都会减少 t[i] . 输出每天融化了的雪的体积. 这个题的正解我怎么想都很难理解,但是 ...

  6. bs4--官文--搜索文档树

    搜索文档树 Beautiful Soup定义了很多搜索方法,这里着重介绍2个: find() 和 find_all() .其它方法的参数和用法类似,请读者举一反三. 再以“爱丽丝”文档作为例子: ht ...

  7. flask_关注者

    表的模型实现 class Follow(db.Model): __tablename__ = 'follows' follower_id = db.Column(db.Integer,db.Forei ...

  8. oracle 可以连接数据库,vs连不上. 报错提示:ORA-12154: TNS: 无法解析指定的连接标识符

    方法1:问题:VS 连接 Data Source=ORCL_Service19;User Id=*;Password=* 连接不上 oracle 可以连接数据库,vs连不上,报错提示:ORA-1215 ...

  9. Policy-Based Reinforcement Learning

    Policy-based Approach policy-based 强化学习通常是要学习一个actor, actor可以用\(\pi_\theta (S)\) 来确定.如果我们用actor来玩游戏, ...

  10. Educational Codeforces Round 38 (Rated for Div. 2)

    这场打了小号 A. Word Correction time limit per test 1 second memory limit per test 256 megabytes input sta ...