是否可以在编译时确定实现是否提供精确宽度的整数类型?
是否可以在编译时确定实现是否提供精确宽度的整数类型?示例代码(想要):
#include <stdint.h>
#if HAS_EXACT_WIDTH_INTEGER_TYPES
uint32_t i;
#else
/* handle the case */
#endif
问题的原因:编写适应性强的代码,如果实现不提供精确宽度的整数类型,则不会导致编译时错误。
回答
C11/C17 7.20p4 :
- 对于实现提供的此处描述的每种类型,261)
<stdint.h>应声明该 typedef 名称并定义关联的宏。相反,对于实现未提供的此处描述的每种类型,<stdint.h>不应声明该typedef名称,也不应定义关联的宏。实现应提供描述为“必需”的那些类型,但不需要提供任何其他类型(描述为“可选”)。
即uint32_t存在iff #defined UINT32_MAX等。