C 中类宏函数的语法

问题描述 投票:0回答:1

在网络上,我读到要定义一个行为类似于函数的宏,语法是:

#define foo(x,y) (bar((x),(y)))

但是考虑到宏只是文本替换,为什么使用上面的语法,而不仅仅是

(bar(x,y))
bar(x,y)

如果我写

#define add0(x,y) ((x)+(y))

#define add1(x,y) (x+y)

#define add2(x,y) x+y

打印时所有三个宏都会输出

3

c macros c-preprocessor
1个回答
1
投票

C 中宏中需要括号

C 宏和括号中参数的使用

不使用括号进行书写可能会导致意外的运算符优先级问题。

考虑以下示例:

#define add2(x,y) x+y

如果调用 add2(1, 2) * 3,它将扩展为 1 + 2 * 3,即 7,而不是 9。这是因为在 C 和 C++ 中,乘法运算符的优先级高于加法运算符。

但是,如果您将宏定义为:

#define add0(x,y) ((x)+(y))

现在已经好了。

© www.soinside.com 2019 - 2024. All rights reserved.