我正在尝试在代码块C编辑器中编写此代码,但输出即将变为36,而不是1。
#include <stdio.h>
#define square(x) x*x
int main()
{
int p=36/square(6);
printf("%d",p);
}
为什么输出是36而不是1?
问题是,宏的定义中没有任何括号-宏are n't'被调用',就像函数一样-它们只会导致替换文本。] >
因此,在您的代码中,该行:
int p=36/square(6);
被替换为:
int p=36/6*6;
以从左到右的顺序求值(因为
*
和/
运算符具有相同的优先级),有效地给出:
int p = (36/6) * 6;
要解决此问题,请在您的宏定义中添加括号:
#define square(x) ((x)*(x))
随时要求进一步的澄清和/或解释。
C预处理器上线