【发布时间】:2014-01-16 11:13:40
【问题描述】:
我有点困惑,我不小心写了与这个等效的代码
int a=a; // there is not a declared before this line
并且编译器很高兴地编译了它——gcc 和 clang,它们都非常符合标准并且具有良好的诊断能力。 (使用-Wall,gcc 4.8 会警告未初始化的变量;clang 不会)。
我认为分配的 RHS 将在 LHS 之前进行评估,因此导致 a 在 RHS 上未定义。我可以简单说明一下为什么这在语法上是合法的吗?
【问题讨论】:
-
但是你没有收到这样的警告warning C4700: uninitialized local variable 'a' used
-
虽然你说“赋值的 RHS 将在 LHS 之前进行评估”,但我认为这是忽略了这也是一个内联变量声明的事实。它相当于
int a; a = a;,这是我对编译器实际在做什么的猜测。 -
我只收到了带有
-Wall的gcc警告。