简单的C预处理器替换
所以我写了一个简单的程序,试图获得#define
宏的更基本的理解,我想知道这两个程序之间的区别是什么,是否有任何根本原因使用第三个程序? :简单的C预处理器替换
#include<stdio.h> #define x 7
int main()
{
int i;
i = x * x * x;
printf("%d", i);
return 0;
}
该程序,因为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。 编辑 办法,迫使第二个打印出343,我们可以加上括号,所以我们可以做到以下几点:
#include<stdio.h> #define x (5+2)
int main()
{
int i;
i = x * x * x;
printf("%d", i);
return 0;
}
会不会有任何理由做这种,而不是第一呢?
回答:
宏替换替换文本,因为它是。
因此C编译器看到代码
i = 7 * 7 * 7; // when #DEFINE x 7
在一种情况下,并且在以下另一
i = 5+2 * 5+2 * 5+2; // when #DEFINE x 5+2
(并且由于简单arthihmetic优先的结果是平凡不同。)
为了让他们eq uivalent一个需要添加括号,如(首选,见注释):
#define x (5+2)
虽然下面就“足够了”这里
i = (x) * (x) * (x);
以上是 简单的C预处理器替换 的全部内容, 来源链接: utcz.com/qa/258258.html