有几种不同的方法来处理这个问题。在需要可移植的开源项目中,常见的解决方案是拥有一个“配置脚本”,运行该脚本来设置构建系统。然后它会HAVE_UINTX_TYPES
在某些或类似的东西中设置或不设置类似的东西config.h
[这是“配置脚本”的结果之一,并执行以下操作:
#include "config.h"
...
#ifndef HAVE_UINTX_TYPES
#include "uintx_types.h"
#endif
在“几乎不需要在任何东西上运行”的系统中,您可以通过简单地将 a-DHAVE_UINTX_TYPES
作为编译器标志的一部分来解决相同的问题。并且由于您(可能)有构建系统的某些部分设置不同的编译选项,选择不同的编译器等,因此对于两个不同的构建,这应该不是一个大问题。
假设你很高兴你unsigned char
的确实是 8 位,你也可以有一个uintx_types.h
包含这样的东西:
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned long uint32_t;
另一种选择是不直接使用uint8_t
等uint16_t
,但有自己的定义[并让这些取决于“是 ARM 还是瑞萨电子”的适当构建设置,例如通过使用不同的包含选项]:
ARM/types.h:
typedef unsigned char u_int8;
typedef unsigned short u_int16;
typedef unsigned int u_int32;
瑞萨/types.h:
typedef unsigned char u_int8;
typedef unsigned int u_int16;
typedef unsigned long u_int32;