c - 没有分号的语句没有错误

标签 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);

    }

为什么语句 b--- 不显示错误。我可以说这是一个错误......?如果不是,请解释内部发生了什么......?

最佳答案

printf返回 int,因此您有一个语法上有效的语句*。这个

a=b---
printf("a=%d b=%d\n",a,b);

是一个单独的语句,完全与此相同:

a = b-- - printf("a=%d b=%d\n",a,b);

或者,为了更加清晰,

a = (b--) - printf("a=%d b=%d\n", a, b);

换句话说,对于intsxyx--- y被解析为(x--) - y


* 虽然在语法上有效,但语句本身是未定义的行为,因为在没有中间序列点的情况下对 b 进行了修改和读取

关于c - 没有分号的语句没有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26583060/

相关文章:

c - 如何 - 使用文件锁求矩阵元素之和 (unix - C/C++)

c - typedef 结构 : unknown name

c - GTKSDL - 处理事件

bash 脚本可以从它作为参数的 C 可执行文件访问信息吗?

c - 快速平方根优化?

iphone - 如何使用 SQLITE3 LIKE 语句

c++ - 程序编译有无返回 0

R:基于多个条件的两个数据帧的子集

php - 迁移到准备好的语句

c# - 多个条件语句的 AND/OR (&&/||) 逻辑