#pragma pack( [ [ { push | pop}, ] [ identifier, ] ] [ n ] ) 有3中定义方式
1、#pragma pack ( 1 )
对齐值为1,即struct内的所有变量size和等于struct's size,如果没有设定pragma pack,结构体成员设定对齐值是/Zp,默认的大小是/Zp8
2、#pragma pack ( push , 1 )
对齐值为1,但会指定对齐方式的代码域,push与pop对应,组成作用范围,需要注意的是结尾应该是#pragma pack( pop ),每次出现push的编译指示时候,紧缩值会被保存到当前的程序编译堆栈
3、#pragma pack ( push, EFS2_SyncNoWait_msg, 4 )
对齐值为4,所以此时struct最终size可能跟其原size相同,EFS2_SyncNoWait_msg会作为表示符与4这个紧缩值关联,当#pragma pack( pop,EF2_SyncNoWait_msg)时,会将EFS2_SyncNoWait_msg关联的和所有头文件可能遇到的紧缩值全部去掉,保证和之前的紧缩值是一样的
PS:如果没有找到匹配的标示符,将从命令行获取紧缩值并产生一个1级警告,默认的紧缩对齐是8,#pragma pack(3)是无效值