FSM*_*axB 5 c macros conditional-compilation c89 c-preprocessor
我想根据整数的大小有条件地编译代码,但我没有找到一种方法来确定预处理器阶段中整数的大小.
一个想法是使用INT_MAX并将其与常量进行比较:
#if INT_MAX >= 9223372036854775807UL
printf("64 bit\n");
#elif INT_MAX >= 2147483647UL
printf("32 bit\n");
#else
printf("16 bit\n");
#endif
Run Code Online (Sandbox Code Playgroud)
但我不认为UL文字可以那么大.而且ULL是不是在C89可用作据我所知.
那你对如何解决这个问题有什么建议吗?是否有一个宏在一些标准头文件中包含int的大小?
不是这个问题的重复,因为我实际上不需要通用sizeof,我不想打印它.我只需要区分条件编译的不同整数大小.
首先测试较小的值应该有效,因为预处理器对#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
Run Code Online (Sandbox Code Playgroud)