没有分号的语句没有错误

Anb*_*kar 1 c statements

     #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---不显示错误.我可以说这是一个错误......?如果不是,请解释一下内部发生了什么......?

jua*_*nza 7

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 xy,x--- y被解析为(x--) - y.


*虽然语法上有效,但语句本身是未定义的行为,因为存在修改和读取而b没有插入序列点

  • @Anbu ..你实际上只有一行而不是两行,所以你不需要一个语句终止符.您正在从绝对有效的整数中减去printf的返回值,该值是int (2认同)