描述
当我尝试使用“packed”属性打包带位域的变量时,该变量与预期的大小不匹配。
解
GNU GCC有一个已知问题,即“char”类型变量上的位域未正确打包。这在在线GCC文档中有记录: http : //gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html
注意: 4.1,4.2和4.3系列GCC忽略char类型的位字段上的“packed”属性。这已在GCC 4.4中修复,但这种变化可能导致结构布局的差异。有关更多信息,请参阅-Wpacked-bitfield-compat的文档。“
另请注意,这也适用于“枚举”类型。 “枚举”未定义为ANSI / ISO C规范中的特定大小。这意味着它可以放在“char”,“short”或“int”类型中。
要解决此问题,请使用“int”或“short”类型而不是“char”或“enum”。
没有回复内容