2
跳过变量初始化格式错误还是会导致不确定的行为?
考虑以下代码: void foo() { goto bar; int x = 0; bar: ; } GCC和Clang 拒绝了它,因为跳转到bar:绕过了变量初始化。MSVC一点也不抱怨(使用x after bar:会引起警告)。 我们可以使用来做类似的事情switch: void foo() { switch (0) { int x = 0; case 0: ; } } 现在所有三个编译器 发出错误。 这些代码片段格式不正确吗?还是引起UB? 我曾经以为两者都是不正确的形式,但是我找不到标准的启示部分。[stmt.goto]不说这事,而且也不[stmt.select] 。