为什么是0;C++ 中的有效语句?

Neo*_*Neo 5 c++

int main() {
    int a;
    2;
    4;
    a;
    
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么这段代码有效(即不引发任何编译错误)?计算机在执行1;或执行时做什么a;

Bat*_*eba 8

诸如0;, 之4;类的语句是无操作的。

请注意,您的程序的行为是未定义的,因为它a;是对未初始化变量的读取a。哎呀。

0例如,是一个有效的表达式(它是int一个值为零的八进制文字类型)。

和一个语句可以是一个表达随后分号。

因此

0;
Run Code Online (Sandbox Code Playgroud)

是法律声明。事实就是如此。当然,现在更改语言以禁止此类操作可能会破坏现有代码。在 C 语言的形成年代,可能也没有太大的兴趣来禁止这些事情。任何合理的编译器都会优化出这样的语句。

(您需要至少一个语句的地方是在switch块体中。;它本身可能会向某些编译器发出警告,因此0;可以使用它。)


xav*_*avc 5

它们是表达式语句,由表达式后跟分号组成的语句。许多语句(如a = 3;, or printf("Hello, World!");)也是表达式语句,编写它们是因为它们具有有用的副作用。

至于计算机做什么,我们可以检查编译器生成的程序集,可以看到当表达式没有副作用时,编译器能够(并且确实)优化了语句。