Program Pack

#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)是无效值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值