我是 C 新手,正在尝试了解 C 中的宏扩展逻辑。 我想知道为什么第一种方法不起作用,但第二种方法却按预期工作。
第一种方法
#include <stdio.h>
#define square(x) x*x
int main()
{
int x = 36/square(6); // Expended as 36/6*6
printf("%d", x);
return 0;
}
// Output: 36
第二种方法
#include <stdio.h>
#define square(x) x*x
int main()
{
int x = square(6)/36; // Expended as 6*6/36
printf("%d", x);
return 0;
}
// Output: 1
有人可以解释一下其中的区别吗?
最佳答案
square(6)/36
扩展为
6*6/36
这相当于
(6*6)/36
显然等于1
。
尽管这显然是为了理解宏并且您可能已经意识到这一点,但有一个建议:
涉及运算符的宏应该用括号括起来!
关于c - C 中的宏用法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34242270/