#define Echo(a)  a
#define Echo(a) (a)


我意识到这里可能没有太大的区别,但是为什么您要在宏主体的圆括号中包含a?它如何改变它?

最佳答案

假设你有

#define mul(x, y)  x * y


如果我说:

mul(a + 5, 6); /* a + 5 * 6 */


现在,如果我更改了宏:

#define mul(x, y)  ((x) * (y))
mul(a + 5, 6); /* ((a + 5) * (6)) */


请记住,不对参数进行求值或执行任何操作,仅执行文本替换。

编辑

有关在括号中包含整个宏的说明,请参见the link发布的Nate C-K

关于c - C宏和括号中参数的使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41825683/

10-12 02:14