kbl*_*uck 5 c standards portability iso
是否有一种可靠的方法来为ISO标准C中的固定8,16,32和64位长度的整数类型声明typedef?
当我说ISO标准C时,我的意思是:
我在StackOverflow中看到了与此类似的其他问题,但没有答案尚未违反上述约束之一.如果不诉诸平台符号,我不确定是否可行.
是的,你可以.
头文件limits.h应该是C90的一部分.然后,我将通过预处理指令值测试SHRT_MAX,INT_MAX,LONG_MAX,和LLONG_MAX和相应设置的typedef.
例:
#include <limits.h>
#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
Run Code Online (Sandbox Code Playgroud)
严格来说,ISO 9899:1999取代了ISO 9899:1990,因此是目前唯一的ISO标准C语言规范.
由于整数类型的精确宽度typedef名称仅在1999版本的标准中引入,因此仅使用1990版本的标准是不可能的.