#include <stdio.h>
int main()
{
int a,b;
b=10;
a=b--;
printf("a=%d b=%d\n",a,b);
a=b--- //Here why i didn't get error....???
printf("a=%d b=%d\n",a,b);
//a=b---- or a=b---; //for these, i got error
a=b--;
printf("a=%d b=%d\n",a,b);
}
Run Code Online (Sandbox Code Playgroud)
为什么声明b---不显示错误.我可以说这是一个错误......?如果不是,请解释一下内部发生了什么......?
printf返回int,所以你有一个语法上有效的语句*.这个
a=b---
printf("a=%d b=%d\n",a,b);
Run Code Online (Sandbox Code Playgroud)
是一个单一的声明,与此完全相同:
a = b-- - printf("a=%d b=%d\n",a,b);
Run Code Online (Sandbox Code Playgroud)
或者,为了更加清晰,
a = (b--) - printf("a=%d b=%d\n", a, b);
Run Code Online (Sandbox Code Playgroud)
换句话说,for ints x和y,x--- y被解析为(x--) - y.
*虽然语法上有效,但语句本身是未定义的行为,因为存在修改和读取而b没有插入序列点