在我看来,定义总是意味着存储分配.
在以下代码中,int i在程序堆栈上分配一个4字节(通常)存储并将其绑定到i,i = 3并将3分配给该存储.但是因为goto,定义被绕过,这意味着没有分配存储空间i.
我听说局部变量在函数的入口处(f()在这种情况下)分配在它们所在的位置,或者在定义点处.
但无论哪种方式,如何i在尚未定义的情况下使用它(根本没有存储空间)?执行时分配给值3的位置在哪里i = 3?
void f()
{
goto label;
int i;
label:
i = 3;
cout << i << endl; //prints 3 successfully
}
Run Code Online (Sandbox Code Playgroud)