为什么C中的此宏表达式表现出异常?

问题描述 投票:-1回答:2

我正在尝试在代码块C编辑器中编写此代码,但输出即将变为36,而不是1。

#include <stdio.h>

#define square(x) x*x

int main()
{
    int p=36/square(6);
    printf("%d",p);
}

为什么输出是36而不是1?

c
2个回答
1
投票

问题是,宏的定义中没有任何括号-宏are n't'被调用',就像函数一样-它们只会导致替换文本。] >

因此,在您的代码中,该行:

int p=36/square(6);

被替换为:

int p=36/6*6;

以从左到右的顺序求值(因为*/运算符具有相同的优先级),有效地给出:

int p = (36/6) * 6;

要解决此问题,请在您的宏定义中添加括号:

#define square(x) ((x)*(x))

随时要求进一步的澄清和/或解释。


1
投票

C预处理器上线

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