#pragma push_macro #pragma pop_macro和#pragma pack的用法
2009-12-12 12:47
393 查看
#pragma push_macro("macro_name")是把macro_name宏的值压入堆栈,而利用#pragma pop_macro("macro_name")来把macro_name宏的值pop出,这里看一个例子
下面是#pragma pack(...)
一种简单的情况是#pragma pack(n)其中n的类型一般为int,他的用法一般和sizeof等关键字连用,详细使用见下:
#pragma pack(n)是用来来设定变量以n字节对齐方式。n字节对齐就是说变量存放的起始地址的偏移量有两种情况:第一、如果n大于等于该变量所占用的字节数,那么偏移量必须满足默认的对齐方式,第二、如果n小于该变量的类型所占用的字节数,那么偏移量为n的倍数,不用满足默认的对齐方式。结构的总大小也有个约束条件,分下面两种情况:如果n大于所有成员变量类型所占用的字节数,那么结构的总大小必须为占用空间最大的变量占用的空间数的倍数;
否则必须为n的倍数
穿插说明一下sizeof,见代码
还有一种#pragma pack()的用法就是如下用法
#include <iostream> using namespace std; #define X 1 #define Y 2 int main(void){ cout<<X<<endl;//1 cout<<Y<<endl;//2 #pragma push_macro("X") #define X 3 cout<<X<<endl;//3 #pragma pop_macro("X") cout<<X<<endl;//1 return 0; }
下面是#pragma pack(...)
一种简单的情况是#pragma pack(n)其中n的类型一般为int,他的用法一般和sizeof等关键字连用,详细使用见下:
#pragma pack(n)是用来来设定变量以n字节对齐方式。n字节对齐就是说变量存放的起始地址的偏移量有两种情况:第一、如果n大于等于该变量所占用的字节数,那么偏移量必须满足默认的对齐方式,第二、如果n小于该变量的类型所占用的字节数,那么偏移量为n的倍数,不用满足默认的对齐方式。结构的总大小也有个约束条件,分下面两种情况:如果n大于所有成员变量类型所占用的字节数,那么结构的总大小必须为占用空间最大的变量占用的空间数的倍数;
否则必须为n的倍数
穿插说明一下sizeof,见代码
#pragma pack(4)//设定为4字节对齐 class test_sizeof { char one; double two; int three; }; cout<<sizeof(test_sizeof)<<endl;//result:16 /////////////////////////////////////////////////////// #pragma pack(16) class test_sizeof { char one; double two; int three; }; cout<<sizeof(test_sizeof)<<endl;//result:24 ////以上为vs2008下的结果
还有一种#pragma pack()的用法就是如下用法
#pragma pack(4) //以后的结构体默认对齐方式为4字节 #pragma pack(push,2) //将4压栈,并且以后默认对齐为2 //... #pragma pack(pop) //将4出栈,并且以后的默认对齐为4
相关文章推荐
- #pragma pack([n|push|pop]) 用法
- #pragma push_macro("MACRO_NAME") 与 #pragma pop_macro("MACRO_NAME") 用法详解
- #pragma pack(push,1) & #pragma pack(pop)
- #pragma pack(push) #pragma pack(pop)
- #pragma pack(push,1) & #pragma pack(pop)
- #pragma pack(push,1) & #pragma pack(pop)
- #pragma pack(push,1) & #pragma pack(pop)
- #pragma pack(push,1)与#pragma pack(pop)
- #pragma pack(push,1) & #pragma pack(pop)
- #pragma pack(push,1) & #pragma pack(pop)
- 释析#pragma pack(push,n) #pragma pack(n) #pragma pack() #pragma pack(pop)
- #pragma pack(push,1) & #pragma pack(pop)
- #pragma warning( pop ) 和#pragma warning( push )有什么用
- 转载: #pragma pack(push,1) & #pragma pack(pop)
- #pragma pack(push,1)/#pragma pack(pop)
- #pragma pack(push,1) & #pragma pack(pop)
- #pragma pack(push,1) (pop)
- #pragma pack(push,1) & #pragma pack(pop)
- #pragma pack(push,1)与#pragma pack(1)的区别
- #pragma pack(push,1) & #pragma pack(pop)