所以我编写了一个简单的程序来尝试对#define
宏进行更基本的理解,我想知道这两个程序之间有什么区别,是否有使用第三个程序的根本原因? :
#include<stdio.h>
#define x 7
int main()
{
int i;
i = x * x * x;
printf("%d", i);
return 0;
}
该程序打印出343因为7 * 7 * 7 = 343
#include<stdio.h>
#define x 5+2
int main()
{
int i;
i = x * x * x;
printf("%d", i);
return 0;
}
该程序从操作顺序打印出27。 编辑 强制第二个打印343的方法我们可以添加括号,以便我们可以执行以下操作:
#include<stdio.h>
#define x (5+2)
int main()
{
int i;
i = x * x * x;
printf("%d", i);
return 0;
}
有没有理由这样做而不是第一种方式呢?
答案 0 :(得分:3)
宏替换替换文本,因为它是。
因此C编译器看到代码
i = 7 * 7 * 7; // when #DEFINE x 7
在一个案例中,以下内容在另一个案例中
i = 5+2 * 5+2 * 5+2; // when #DEFINE x 5+2
(由于简单的arthihmetic优先权,结果是微不足道的。)
要使它们等效,需要添加括号,例如(首选,请参阅注释):
#define x (5+2)
虽然以下“足够”在这里
i = (x) * (x) * (x);