5

unsigned long long如果该类型在当前构建环境中可用,我如何通过预处理器指令检查?

我试着检查

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

但是使用 gcc 并且至少没有-std=-compiler 参数进行编译会导致“不可用”(但会起作用)。

是否有更好的宏来检查,以便至少它可以与 C99 标准编译器和没有 GCC 的 GCC 一起使用-std=C99

4

2 回答 2

3

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

如果已定义,则unsigned long long int几乎可以肯定该类型可用。如果未定义,则该类型可能不可用——或者至少,它没有得到很好的支持,并且可能只能作为不可移植的编译器扩展使用。

于 2016-07-05T10:37:06.923 回答
2

如果它不可用,你会怎么做?你的代码应该编译和工作吗?如果不是,请放弃检查,使用 unsigned long long,编译器会告诉您它是否无法处理。

如果您想要一个适用于 C99 编译器的宏 - 好吧,那毫无意义,因为 C99 需要 unsigned long long。

于 2016-05-31T09:33:06.470 回答