c - 在编译时定义(并计算)一个 C 常量

标签 c compile-time-constant

假设我的 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/

相关文章:

c - 如何确定/测量具有位字段的结构的大小?

c - C 中的十六进制常量是无符号的,即使 L 后缀

java - 代码中的字符串常量/文字是否会大大减慢编译速度?

scala - 有没有办法在编译时测试一个常量是编译时常量?

c - pthread_self() 返回的线程 ID 与调用 gettid(2) 返回的内核线程 ID 不同

c - 使用匿名结构与带 typedef 的命名结构

C - 对不完整类型(struct input_dev)无效使用 sizeof

c++ - 如何在 Visual C++ 编译期间输出编译时数字常量?

c++ - constexpr c 字符串连接,在 constexpr 上下文中使用的参数

c - 具有相同名称的类似函数的宏和枚举器