下面程序段的执行结果是_#define prt(a,b) if(!a) b=amain(){int x=1,y=0;if(x>y) prt(x,y);else prt(y,x);printf(“%d,%d”,x,y);}(A) 1,0(B) 0,0(C) 0,1(D) 编译出错为什么是C ,还有if(!a) b=a 是如果a为假 则a赋值给b吗?

来源:学生作业帮助网 编辑:作业帮 时间:2024/11/27 07:22:18
下面程序段的执行结果是_#define prt(a,b) if(!a) b=amain(){int x=1,y=0;if(x>y) prt(x,y);else prt(y,x);printf(“%d,%d”,x,y);}(A) 1,0(B) 0,0(C) 0,1(D) 编译出错为什么是C ,还有if(!a) b=a 是如果a为假 则a赋值给b吗?
xS]OA+C L4$-!nɢ(@]*ժ `b/vfvy/JkӤM63{ιw +'V-C{yh[I?g-RH4K(zB CoBјWڈ֑JCyQ)zM*XUG>go vPg~s ?fzeb􈩒%'tl-$M!j2aZ8x^hι+Y@lL>tzE9b-)\/fg}bTZc<+<61r

下面程序段的执行结果是_#define prt(a,b) if(!a) b=amain(){int x=1,y=0;if(x>y) prt(x,y);else prt(y,x);printf(“%d,%d”,x,y);}(A) 1,0(B) 0,0(C) 0,1(D) 编译出错为什么是C ,还有if(!a) b=a 是如果a为假 则a赋值给b吗?
下面程序段的执行结果是_
#define prt(a,b) if(!a) b=a
main(){
int x=1,y=0;
if(x>y) prt(x,y);
else prt(y,x);
printf(“%d,%d”,x,y);}
(A) 1,0
(B) 0,0
(C) 0,1
(D) 编译出错
为什么是C ,还有if(!a) b=a 是如果a为假 则a赋值给b吗?

下面程序段的执行结果是_#define prt(a,b) if(!a) b=amain(){int x=1,y=0;if(x>y) prt(x,y);else prt(y,x);printf(“%d,%d”,x,y);}(A) 1,0(B) 0,0(C) 0,1(D) 编译出错为什么是C ,还有if(!a) b=a 是如果a为假 则a赋值给b吗?

楼主,你要注意,prt(a,b) 是“宏”,不是函数.

  因此,原始代码看起来很迷惑人的!

因为在编译前,是要进行宏替换的,因此,我们先看看宏替换之后的代码:

(为减少内容,只看if语句那儿)

//完成宏替换后的代码:
if(x>y) if(!x) y=x;
else if(!y) x=y;

//这样仍然有点“迷惑人”
//那再给它加上花括号,流程就清晰了:
if(x>y) {
   if(!x) y=x;
   else {if(!y) x=y;}
}
//看上面的代码,运行结果很明晰了吧!

 因最初x=1 ,而y=0

因此,第一个if(x>y)为真,

  然后if(!x) 为假,执行了 else语句块.

  在else的语句块中,if(!y) 为真,就执行了x = y

最终结果,就是x和y的值都为 0 了.