【发布时间】:2023-03-17 03:04:01
【问题描述】:
显然,#define 语句有时必须有括号,如下所示:
#define WIDTH 80+20
int a = WIDTH * 2; // expect a==200 but a==120
所以我总是用括号括起来,即使它只是一个数字:
#define WIDTH (100)
C 新手问我为什么要这样做,所以我试图找到一个极端情况,即单个数字 #define 上没有括号会导致问题,但我想不出一个。
这种情况存在吗?
【问题讨论】:
-
我将把它留在这里:parashift.com/c++-faq-lite/inline-functions.html#faq-9.5(查找为什么
#define宏是邪恶的链接)。 -
@TReddy 谢谢,但你不会用
inline int width() { return 100; }替换#define WIDTH (100)对吧?! -
不,我想分享为什么宏是邪恶的链接,而这些链接恰好是在关于内联函数的那部分收集的(这与你的问题正交)。在您的情况下,宏是否比
static int width = 80+20提供更好的结果? -
@TReddy 这是一个好点,快速测试显示唯一真正的缺点是我收到一堆警告,它是在 .h 文件中定义的,但不是在每个 .c 文件中使用包括它。也许可以关闭该警告,然后这将是一个可行的替代方案。
-
@Philip 谢天谢地!那里的错字会导致什么!
#define 100 50-50
标签: c c-preprocessor parentheses