在使用goto
和switch
语句时,我对变量定义感到困惑。
以下代码被编译器接受:
goto label0;
int j; // skipped by "goto"
label0:
j = 3;
我的问题是:
int j;
的定义,程序将如何创建对象j
,然后在j = 3
中为其分配值?goto
和label
之间的代码是否已编译? goto
和label
之间的代码是否已执行? (在运行时间)(我认为这是一个新的问题,更多地关注变量定义和编译与执行的相对顺序。)
答案 0 :(得分:1)
刚刚找到了另一个问题并且答案很接近:
Why is it OK to jump into the scope of an object of scalar type w/o an initializer?
总结并回答问题:
goto
是一个运行时的东西。定义仍然发生; goto
跳过了部分,但发生了定义。