为什么允许跳过变量定义(使用goto)?

时间:2014-06-21 20:08:11

标签: c++ variables

在使用gotoswitch语句时,我对变量定义感到困惑。 以下代码被编译器接受:

goto label0;
int j; // skipped by "goto"

label0:
j = 3;

我的问题是:

  1. 由于跳过int j;的定义,程序将如何创建对象j,然后在j = 3中为其分配值?
  2. gotolabel 之间的代码是否已编译
  3. gotolabel 之间的代码是否已执行? (在运行时间)
  4. 变量定义是在编译时(或更合适的术语)还是在运行时发生的?
  5. (我认为这是一个新的问题,更多地关注变量定义和编译与执行的相对顺序。)

1 个答案:

答案 0 :(得分:1)

刚刚找到了另一个问题并且答案很接近:

Why is it OK to jump into the scope of an object of scalar type w/o an initializer?

总结并回答问题:

  1. goto是一个运行时的东西。定义仍然发生;
  2. 是的,已编译。
  3. 不,不执行。
  4. 尽管goto跳过了部分,但发生了定义。