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
我想根据整数的大小有条件地编译代码,但我没有找到在预处理器阶段确定整数大小的方法。
一个想法是使用 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