ISO C标准规定枚举大小的类型取决于实现:
每个枚举类型应与char(一个有符号整数)兼容 类型或无符号整数类型。类型的选择是 实现定义,但应能够代表 枚举的所有成员的值。
然后,如果我们遇到以下情况:
从库中的用户代码传递值时,可能会导致二进制不兼容(反之亦然) - 例如用户代码将依赖int
,但库代码将使用short
- 我们可能会遇到问题,因为在用户代码中读取时,从库返回的枚举变量的某些字节将是未初始化的。因此,如果我们在这方面依赖标准,我们正式遇到这样的问题
这是正确的推理吗?特别是考虑到许多C库以类似的方式分发:public headers + static / shared libraries。