这个程序的输出是什么以及如何?
#include<stdio.h>
int main(){
int a=0,b=10;
a=b---
printf("the value of b=%d",b);
printf("the value of a=%d",a);
return 0;
}
答案 0 :(得分:5)
在您的代码中,撰写
a=b---
printf("the value of b=%d",b);
与
相同a = b---printf("the value of b=%d",b);
这是一个带有 undefined behavior 的表达式,因为尝试在两个子表达式中更改并使用变量b
的值两者之间的序列点。因此,此代码的输出无法证明其合理性。
没有上述问题,通常,语法类似于
x = (y--) - (<return value of printf() call>)
这是一种完全有效的语法。
注意:
为什么a = b---<something>
被视为a = (b--) - <something>
而不 a = b - -- <something>
归因于maximal munch规则。
答案 1 :(得分:1)
严格来说,正如其他人所说,因为这是未定义的行为,结果可能是任何事情。虽然它们是正确的,但它并不能解释为什么在这个特定的编译器中得到这个特定的答案。
在实践中,b通常会打印为9或10,具体取决于编译器是先执行先行还是先执行printf。
printf返回打印的字符数。在这种情况下,我认为这是16或17。
所以这就像写a = (b--) - 16;
b在递减之前是10,这是一个后递减,所以这是使用的值。