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

时间:2016-11-04 04:39:42

标签: c macros c-preprocessor conditional-compilation c89

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

一个想法是使用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的副本,因为我实际上并不需要通用尺寸而且我不想打印它。我只需要区分条件编译的不同整数大小。

1 个答案:

答案 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