#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语言的宏命令,会秒懂更多东西。
#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语言的宏命令,会秒懂更多东西。