#pragma部分用法
来源:互联网 发布:gtkwave windows 编辑:程序博客网 时间:2024/06/06 17:04
1、#pragma once
这是一个比较常用的C/C++杂注,只要在头文件的最开始加入这条杂注,就能够保证头文件只被编译一次。
两种保证头文件只编译一次的具体写法:
方式一:
#ifndef _SOMEFILE_H_
#define _SOMEFILE_H_
.......... // 一些声明语句
#endif
方式二:
#pragma once
... ... // 一些声明语句
二者比较:#ifndef的方式依赖于宏名字不能冲突,这不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被不小心同时包含。当然,缺点就是如果不同头文件的宏名不小心“撞车”,可能就会导致头文件明明存在,编译器却硬说找不到声明的状况。
#pragma once则由编译器提供保证:同一个文件不会被编译多次。注意这里所说的“同一个文件”是指物理上的一个文件,而不是指内容相同的两个文件。带来的好处是,你不必再费劲想个宏名了,当然也就不会出现宏名碰撞引发的奇怪问题。对应的缺点就是如果某个头文件有多份拷贝,本方法不能保证他们不被重复包含。当然,相比宏名碰撞引发的“找不到声明”的问题,重复包含更容易被发现并修正。
方式一由于语言支持所以移植性好,方式二 可以避免名字冲突
#pragma once方式产生于#ifndef之后,因此很多人可能甚至没有听说过。目前看来#ifndef更受到推崇。因为#ifndef受语言天生的支持,不受编译器的任何限制;而#pragma once方式却不受一些较老版本的编译器支持,换言之,它的兼容性不够好。也许,再过几年等旧的编译器死绝了,这就不是什么问题了。
2、#pargma pack(数字)程序编译器对结构的存储的特殊处理确实提高CPU存储变量的速度,但是有时候也带来了一些麻烦,我们也屏蔽掉变量默认的对齐方式,自己可以设定变量的对齐方式。
编译器中提供了#pragma pack(n)来设定变量以n字节对齐方式。n字节对齐就是说变量存放的起始地址的偏移量有两种情况:第一、如果n大于等于该变量所占用的字节数,那么偏移量必须满足默认的对齐方式,第二、如果n小于该变量的类型所占用的字节数,那么偏移量为n的倍数,不用满足默认的对齐方式。结构的总大小也有个约束条件,分下面两种情况:如果n大于所有成员变量类型所占用的字节数,那么结构的总大小必须为占用空间最大的变量占用的空间数的倍数;否则必须为n的倍数。
下面举例说明其用法。
#pragma pack(push) //保存对齐状态
#pragma pack(4)//设定为4字节对齐
内存对齐的博客:http://blog.csdn.net/quincuntial/article/details/49835729
3、#pargma comment
该指令将一个注释记录放入一个对象文件或可执行文件中。
常用的lib关键字,可以帮我们连入一个库文件。
例:#pragma comment(lib,"a.lib")
0 0
- #pragma部分用法
- Pragma用法
- #Pragma用法
- pragma用法
- Pragma用法
- #Pragma用法
- #pragma用法
- #pragma 用法
- #pragma用法
- #pragma 用法
- #pragma 用法
- #pragma用法
- #pragma 用法
- #pragma用法
- #pragma 用法
- #pragma 用法
- #pragma用法
- pragma用法
- oj 1026 丑数
- Entity Framework 系列: 概要
- css简介
- nyoj 79 拦截导弹 【最长递增子序列】
- 设计模式之策略模式
- #pragma部分用法
- 通过Htmlunit操作模拟百度查询接口的填写与提交
- android源码开发之Camera添加自动对焦ListPreference,camera,key
- sublime text2 使用技巧之快捷键
- iOS开发的52个要点纪要之四
- 跨区域 Scrum 团队项目管理经验谈
- ListView
- LeetCode145——Binary Tree Postorder Traversal二叉树后序遍历
- WPF 绘正方形,支持从各个方向开始绘