是否有一种可靠的方法来为ISO标准C中的固定8,16,32和64位长度的整数类型声明typedef?
当我说ISO标准C时,我的意思是:
ISO C89/C90,而不是C99.
没有在ISO标准中定义的标头.
没有在ISO标准中定义的预处理器符号.
ISO标准中未指定类型大小的假设.
没有专有供应商符号.
我在StackOverflow中看到了与此类似的其他问题,但没有答案尚未违反上述约束之一.如果不诉诸平台符号,我不确定是否可行.
是的,你可以.
头文件limits.h
应该是C90的一部分.然后,我将通过预处理指令值测试SHRT_MAX
,INT_MAX
,LONG_MAX
,和LLONG_MAX
和相应设置的typedef.
例:
#include#if SHRT_MAX == 2147483647 typedef unsigned short int uint32_t; #elif INT_MAX == 2147483647 typedef unsigned int uint32_t; #elif LONG_MAX == 2147483647 typedef unsigned long uint32_t ; #elif LLONG_MAX == 2147483647 typedef unsigned long long uint32_t; #else #error "Cannot find 32bit integer." #endif
严格来说,ISO 9899:1999取代了ISO 9899:1990,因此是目前唯一的ISO标准C语言规范.
由于整数类型的精确宽度typedef名称仅在1999版本的标准中引入,因此仅使用1990版本的标准是不可能的.