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

C89 determine size of int at preprocessor time

我想根据整数的大小有条件地编译代码,但我没有找到在预处理器阶段确定整数大小的方法。

一个想法是使用 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 文字可以那么大。据我所知,ULL 在 C89 中不可用。

那么你对如何解决这个问题有什么建议吗?是否有一个包含某些标准 header 中 int 大小的宏?

编辑:

不是 this question 的副本,因为我实际上不需要通用 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