假设我的 C 代码使用常量 RANGEMAX
,它是适合 int
的 10 的最大幂。我可以定义它:
#include <limits.h>
#if (INT_MAX < 1)
#define RANGEMAX ERROR1
#elif (INT_MAX >= 1) && (INT_MAX < 10)
#define RANGEMAX 1
#elif (INT_MAX >= 10) && (INT_MAX < 100)
#define RANGEMAX 10
#elif (INT_MAX >= 100) && (INT_MAX < 1000)
#define RANGEMAX 100
... /* well, you get the picture */
#elif (INT_MAX >= 10000000000000000)
#define RANGEMAX ERROR2
#endif
在宏预处理阶段是否有更智能的方法来进行如此简单的计算?
因为这些都是“简单”的计算,所以我更喜欢像我这样的普通人只要阅读代码就能理解的解决方案。
最佳答案
INT_MAX
被定义为至少 32767(即 2^15-1)。由于 int
已签名,实际上您只需要检查 2^15-1、2^31-1 和(理论上)2^63-1。这将减少您的 #if
block 的大小。
关于c - 在编译时定义(并计算)一个 C 常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27474140/