C enum二进制兼容性

时间:2017-11-09 17:07:31

标签: c enums

ISO C标准规定枚举大小的类型取决于实现:

  

每个枚举类型应与char(一个有符号整数)兼容   类型或无符号整数类型。类型的选择是   实现定义,但应能够代表   枚举的所有成员的值。

然后,如果我们遇到以下情况:

  1. 某些C库分布在公共头文件和二进制文件中。该 library提供了一些枚举参数或返回枚举值的接口。
  2. 用户使用来自public的枚举声明编译其源文件 headers - 用户端的编译器可能使用不同大小的枚举 (从图书馆内的大小)。
  3. 从库中的用户代码传递值时,可能会导致二进制不兼容(反之亦然) - 例如用户代码将依赖int,但库代码将使用short - 我们可能会遇到问题,因为在用户代码中读取时,从库返回的枚举变量的某些字节将是未初始化的。因此,如果我们在这方面依赖标准,我们正式遇到这样的问题

    这是正确的推理吗?特别是考虑到许多C库以类似的方式分发:public headers + static / shared libraries。

0 个答案:

没有答案