我想根据整数的大小有条件地编译代码,但是我还没有找到一种方法来确定预处理器阶段中整数的大小。
一个想法是使用INT_MAX
并将其与常量进行比较:
#if INT_MAX >= 9223372036854775807UL
printf("64 bit\n");
#elif INT_MAX >= 2147483647UL
printf("32 bit\n");
#else
printf("16 bit\n");
#endif
但我不认为保证UL
字面可以那么大。据我所知,C89中没有ULL
。
那么你对如何解决这个问题有任何建议吗?是否有一个宏在某些标准头文件中包含int的大小?
不是this question的副本,因为我实际上并不需要通用尺寸而且我不想打印它。我只需要区分条件编译的不同整数大小。
答案 0 :(得分:7)
首先测试较小的值应该有效,因为预处理器在#if
语句上使用快捷方式评估:
#if INT_MAX == 32767
#error 16 bits
#elif INT_MAX == 2147483647
#error 32 bits
#elif INT_MAX == 9223372036854775807
#error 64 bits
#else
#error "What kind of weird system are you on?"
#endif