检查是否有无符号长整数

时间:2016-05-31 09:01:04

标签: c c-preprocessor unsigned-long-long-int

如果当前构建环境中的unsigned long long类型可用,我如何通过预处理程序指令进行检查?

我试过检查

#if __STDC_VERSION__ >= 199901L
    /* Available */
#else
    /* Not available */
#endif

但是使用gcc编译,至少没有-std= - 编译器参数导致“不可用”(但可以工作)。

是否有更好的宏检查,以便至少它适用于C99标准编译器和没有-std=C99的GCC?

2 个答案:

答案 0 :(得分:3)

如果没有,你打算做什么?你的代码应该编译和工作吗?如果没有,请删除检查,使用unsigned long long,编译器将告诉您它是否无法处理它。

如果你想要一个适用于C99编译器的宏 - 那么,这是毫无意义的,因为C99需要无符号长long。

答案 1 :(得分:1)

虽然它不是最优雅的解决方案,但我的第一直觉是检查ULLONG_MAX标题中是否存在limits.h符号。

如果已定义,则几乎可以肯定unsigned long long int类型。如果未定义,则该类型可能不可用 - 或者至少,它不受支持,并且可能仅作为非可移植编译器扩展可用。