C89在预处理器时确定int的大小

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,我不想打印它.我只需要区分条件编译的不同整数大小.

nne*_*neo 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
Run Code Online (Sandbox Code Playgroud)

  • @FSMaxB我认为回退到16位并不合理.你已经测试了它,它没有通过.代码明显失败,比创建可能不正确的代码更好. (2认同)