#pragma用法
#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用法的更多相关文章
- 汇总#pragma用法
这几天忙着去复习了,但是心理总是不踏实,不到实验室里就觉得一天的生活变了个样,现在还是晚上来这里“搞起”吧,白天还是在复习准备考试.因为要开始学习freescale,准备明年的比赛了,觉得是时候开始搞 ...
- [C++] 头文件中的#ifndef,#define,#endif以及#pragma用法
想必很多人都看过“头文件中用到的 #ifndef/#define/#endif 来防止该头文件被重复引用”.但是是否能理解“被重复引用”是什么意思?头文件被重复引用了,会产生什么后果?是不是所有的头文 ...
- c++ 一些随笔
1. A region of source code where any use of the unqualified name (that is, as a plain identifier) re ...
- #pragma GCC system_header用法
在看公司公共库的头文件中发现了:#pragma GCC system_header一行,以前没有见过这种用法,在网上查了一下,解释如下: 从#pragma GCC system_header直到文件结 ...
- #pragma once用法总结
1.#pragmaonce这个宏有什么作用? 为了避免同一个头文件被包含(include)多次,C/C++中有两种宏实现方式:一种是#ifndef方式:另一种是#pragma once方式. 在能够支 ...
- C++ pragma once 与 ifndef 用法区别
#pragma once 与 #ifndef 的作用 (1)在C/C++中,在使用预编译指令#include的时候,为了防止重复引用造成二义性. (2)在能够支持这两种方式的编译器上,二者并没有太大的 ...
- 关于pragma pack的用法(一)
一个很重要的参数#pragma pack(n) 数据边界对齐方式:以如下结构为例: struct { char a; WOR ...
- IOS笔记 #pragma mark的用法
简单的来说就是为了方便查找和导航代码用的. 下面举例如何快速的定位到我已经标识过的代码. #pragma mark 播放节拍器 - (void) Run:(NSNumber *)tick { //.. ...
- pragma pack(非常有用的字节对齐用法说明)
强调一点: #pragma pack(4) typedef struct { char buf[3]; word a; }kk; #pragma pack() 对齐的原则是min(sizeof(wor ...
随机推荐
- Falsy Bouncer-freecodecamp算法题目
Falsy Bouncer(过滤数组假值) 要求 删除数组中的所有假值.(在JavaScript中,假值有false.null.0."".undefined 和 NaN.) 思路 ...
- H5 移动APP - 面包店
使用jquerymobile.html5.css3实现移动APP 流程图 打包 用hbuilder实现打包 效果截图展示 图2-1 APP图标 图2-2 主页 图2-3 面包列表&详细信息 图 ...
- 01windows常用命令及批处理
1. 概述 复制内容:右键弹出快捷菜单,选择"标记(K)",然后选中所需要的内容,然后右键即可 粘贴内容:右键弹出快捷菜单,选择"粘贴(P)" 命令参数的路径: ...
- mysql的字符串连接符
以前用SQL Server 连接字符串是用“+”,现在数据库用mysql,写个累加两个字段值SQL语句居然不支持"+",郁闷了半天在网上查下,才知道mysql里的+是数字相加的操作 ...
- leetcode-23-DynamicProgramming-1
357. Count Numbers with Unique Digits 解题思路: 用arr[i]存放长度为i时,各位互不相同的数字的个数,所以arr[1]=10,arr[2]=9*9.(第一位要 ...
- centos7 安装显卡驱动方法
方法一: 首先需要添加一个第三方的源ELRepo.这个源支持RED HAT系的Linux系统,主要是提供一些硬件的驱动程序.这个源的主页如下: http://elrepo.org/tiki/tiki- ...
- HDU - 4763 Theme Section (KMP的next数组的应用)
给定一个字符串,求出一个前缀A,使得字符串的构成可以表示成ABABA的形式(B可以为空串). 输出这个前缀的最大长度. KMP算法Next数组的使用. 枚举中间的每个位置,可以根据Next数组求出这个 ...
- 水题:51Nod1432-独木舟
1432 独木舟 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 Problem Description n个人,已知每个人体重.独木舟承重固定,每只独木舟最多坐两 ...
- JS页面快捷键库hotkeys.js
网友提供了一个好用的快捷键库,没有任何依赖,这是一个强健的 Javascript 库用于捕获键盘输入和输入的组合键,它没有依赖,压缩只有只有(~3kb). 这里也要特别感谢园友kacper的提醒与提供 ...
- day05_01 鸡汤+内容回顾
推荐电影: 1.被解救的姜戈 2.华尔街之狼 3.阿甘正传 4.辛德勒的名单 5.肖申克的救赎 6.上帝之城 7.焦土之城 8.绝美之城 打印多行 msg = "hello 1 hello ...