如果当前构建环境中的unsigned long long
类型可用,我如何通过预处理程序指令进行检查?
我试过检查
#if __STDC_VERSION__ >= 199901L
/* Available */
#else
/* Not available */
#endif
但是使用gcc编译,至少没有-std=
- 编译器参数导致“不可用”(但可以工作)。
是否有更好的宏检查,以便至少它适用于C99标准编译器和没有-std=C99
的GCC?
答案 0 :(得分:3)
如果没有,你打算做什么?你的代码应该编译和工作吗?如果没有,请删除检查,使用unsigned long long,编译器将告诉您它是否无法处理它。
如果你想要一个适用于C99编译器的宏 - 那么,这是毫无意义的,因为C99需要无符号长long。
答案 1 :(得分:1)
虽然它不是最优雅的解决方案,但我的第一直觉是检查ULLONG_MAX
标题中是否存在limits.h
符号。
如果已定义,则几乎可以肯定unsigned long long int
类型。如果未定义,则该类型可能不可用 - 或者至少,它不受支持,并且可能仅作为非可移植编译器扩展可用。