主流编译器如:gcc、vc、MinGW-gcc等枚举变量均为4字节少量编译器会根据枚举个数做优化,如只有3个枚举值时size可能为1。
enum长度不确定会带来可移植性问题如果第三方库API接口使用enum类型,编译和调用库时一旦有关enum长度的编译器设置不一致API接口层对数值的解析就不匹配。比如上层应用编译时没有用-fshort-enums默认用4字节空间来存储使用enum变量,而编译库时设置了fshort-enums则库内部此enum
size可能为1。当把enum变量地址传进API时内部只修改变量最低字节,高3字节值无变化(内容随机)API返回时,上层使用的4字节enum变量值就可能随机(潜规则篇之API接口)
C陷阱篇之enum默认长度