若有以下宏定义:#define N 3 #define Y(n) ((N+1)*n) ,执行语句“z=2*(N+Y(5+1));”后,Z的值是?答案是48..为什么?

问题描述:

若有以下宏定义:#define N 3 #define Y(n) ((N+1)*n) ,执行语句“z=2*(N+Y(5+1));”后,Z的值是?
答案是48..为什么?

Y(5+1) = ((3+1)*5+1)
z = 2*(3+((3+1)*5+1)) = 2*(3+21) = 48
陷阱在于Y(n)的定义,若改为:
#define Y(n) ((N+1)*(n))
则z的值为54.