当我们编译并运行以下 C 程序片段时会发生什么?
#include "stdio.h"
int main()
{
int a = 10;
int b = 15;
printf("=%d",(a+1),(b=a+2));
printf(" %d=",b);
return 0;
}
(A) =11 15=
(B) =11 12=
(C)由于第一个 printf() 中的 (b=a+2) 导致的编译器错误。
(D)没有编译错误,但输出将是 =11 X= 其中 X 将取决于编译器实现。答案:(乙)
说明:按照 C 标准 C11,printf() 的所有参数都被评估,而不管它们是否被打印。这就是为什么 (b=a+2) 也将被评估并且 b 的值在第一个 printf() 之后将为 12。所以正确答案是B。
这个问题的测验