我有点困惑,我设法不小心写了相当于这个的代码
int a=a; // there is not a declared before this line
Run Code Online (Sandbox Code Playgroud)
并且编译器愉快地编译了它 - gcc和clang,它们非常符合标准且具有良好的诊断功能.(用-Wall,gcc 4.8警告未初始化的变量; clang不警告).
我认为分配的RHS将在LHS之前进行评估,因此导致a在RHS上未定义.我可以对这个语法合法的原因进行一些简单的澄清吗?
名称的范围在其完整声明之后开始。因此,a在初始化时已经在范围内。
Stroustrup 有与您指出的完全相同的示例来演示范围规则。
请参阅:Stroustrup“C++ 编程语言,第 4 版”,第 158 页。
编辑:哎呀,没有注意到问题被标记为“C”,但我仍然认为它也适用于 C