问一道2005年的上海C语言考试的详细解答

来源:百度知道 编辑:UC知道 时间:2024/05/10 23:36:57
#define SQR(x) x*x
void main( )
{
int s=8, a=2, b=3;
s=SQR(a+b)*4;
printf(“s=%d\n”, s);
}

为什么答案是20,谢谢各位!

#define SQR(x) x*x

s=SQR(a+b)*4;

展开后及是
a+b*a+b*4;
代入ab的值
2+3*2+3*4 = 20

这里要注意宏的替换。 x是替换成a+b的

带参的宏定义直接展开置换 按照优先序运算
SQR(a+b)*4 展开后相当于 a+b*a+b*4=2+3*2+3*4=20
注意 这里是不带括号的
参看 谭浩强c程序设计第九章
当年做过这个题~~~