[杂谈] 填空题 - 宏定义的使用

来源:互联网 发布:超级理财软件官网 编辑:程序博客网 时间:2024/05/17 18:04
#define N 3
#define Y(n) ((N+1)*n)

printf("%d\n", 2*(N+Y(5+1)));的结果是多少?

不是很简单么当然是2*(3+4*6) = 54么,恭喜你错了。
请继续想清楚再往后看。


































首先N = 3;
那么先把所有用到N的地方都换成3
现在是
#define Y(n) ((N+1)*n)  ->  Y(n) (4*n)
然后关注表达式:2*(N+Y(5+1))
2*(N+Y(5+1))  ->  2*(3+Y(5+1))
Y(5+1)  ->  4*5+1
所以,2*(3+Y(5+1))  -> 2*(3+4*5+1)  ->  48
重点就在于这个宏命令,不要想当然的先计算,后代入。
豁然开朗的继续去查查C语言的宏命令,会秒懂更多东西。
0 0