【发布时间】:2012-06-04 22:15:42
【问题描述】:
我尝试在以下代码中使用宏 SQR 的定义:
#define SQR(x) (x*x)
int main()
{
int a, b=3;
a = SQR(b+5); // Ideally should be replaced with (3+5*5+3), though not sure.
printf("%d\n",a);
return 0;
}
它打印23。如果我将宏定义更改为SQR(x) ((x)*(x)),则输出与预期一致,64。我知道在 C 中调用宏会用宏的定义替换调用,但我仍然无法理解,它是如何计算的 23。
【问题讨论】:
-
在你未来的职业生涯中。尽量不要依赖宏。或者,如果您必须使用它们,请将它们用于非常小的代码。不是覆盖半页的巨大宏怪物。
-
@CJohnson:是的,我几乎没有意识到在我的 C/C++ 项目中使用宏的必要性,这是 C 语言中令人困惑的领域之一,即使在做了多年的开发人员/学生之后也是如此.
标签: c macros c-preprocessor parentheses