下面程序的输出结果是( )
#include<stdio.h>
#define SQR(x) (x*x)
void main()
{
int a,b=3;
a=SQR(b+2);
printf(“\n%d”,a);
}
A.11 B.25 C.不定值 D.产生错误
将 b+2 代入 SQR(x) 中,得到 SQR(b+2) 展开为 (b+2*b+2) 。由于宏替换只是简单的文本替换,不进行运算优先级判断,所以展开的结果并不是预期的 (b+2)*(b+2) ,而是 b+2*b+2
将 b+2 代入 SQR(x) 中,得到 SQR(b+2) 展开为 (b+2*b+2)。由于宏替换只是简单的文本替换,不进行运算优先级判断,所以展开的结果并不是预期的 (b+2)*(b+2),而是 b+2*b+2
b+2
SQR(x)
SQR(b+2)
(b+2*b+2)
(b+2)*(b+2)
b+2*b+2
此题需要注意,给宏定义的函数的函数传有带变量时数,不能先算再传,则是直接用表达式传递过去计算
3+2x3+2
x= b+2
b+2 * b+2 = b+(2*b)+b = 3+6+3 = 11
LEK 回复 zibingo: 3加6➕3等于11?
admin 回复 LEK: 他应该是笔误了,b+2 * b+2 = b+(2*b)+2 = 3+6+2 = 11
先替换再运算,不加括号
A
用户登录可进行刷题及查看答案
登录后提交答案