2016-05-31 175 views
4

如何通过预处理器指令检查unsigned long long类型在当前编译环境中是否可用?检查是否有无符号long long可用

我试图检查

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

但用gcc编译,并至少在没有-std= -compiler论证这导致“不avaibalble”(但会工作)。

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

+8

不是最优雅的解决方案,但我的第一本能是检查'limits.h'头中是否存在'ULLONG_MAX'符号。 –

+0

完成。我有点惊讶,你没有得到任何更好的答案。我想快速和肮脏的解决方案有时是最好的! –

回答

1

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

如果已定义,那么unsigned long long int类型几乎肯定可用。如果没有定义,那么类型可能不可用 - 或者至少,它不是很好的支持,并且可能只能作为非可移植的编译器扩展提供。

3

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

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

+0

很确定他在这个问题中回答了你的第二个问题:*“用gcc编译,至少没有-std = -compiler参数,这会导致”不可用“(但会起作用)。”* –

+0

1)然后我必须模拟64位整数运算与一些较小的“int”。该代码仅需要64位的中间值。 2)我想检查'long long'是否可用。代码应该在每个编译器中进行编译,并且*至少*检测出提供'long long'的情况。它不需要检测一些奇怪的编译器中可用的'long long'。 – urzeit

相关问题