检查unsigned long long是否可用

Check if unsigned long long is available

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

我试过检查

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

但是使用 gcc 编译并且至少没有 -std=-compiler 参数会导致 "Not avaibalble"(但会起作用)。

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

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

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

虽然这不是最优雅的解决方案,但我的第一直觉是检查 limits.h header.[=13= 中是否存在 ULLONG_MAX 符号]

如果定义了,那么unsigned long long int类型几乎肯定可用。如果未定义,则该类型可能不可用——或者至少,它不是 well-supported,并且可能仅作为 non-portable 编译器扩展可用。