简单的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

回到顶部