В моем сознании, всегда, определение означает распределение памяти.
В следующем коде int i
выделяет 4-байтовое (обычно) хранилище в стеке программ и привязывает его к i
, а i = 3
назначает 3 этому хранилищу. Но из-за goto
определение обходит, что означает, что для i
нет хранилища.
Я слышал, что локальные переменные выделяются либо при входе функции (f()
в этом случае), где они находятся, либо в точке определения.
Но в любом случае, как i
использовать, пока он еще не определен (вообще нет хранилища)? Где присваивается значение три при выполнении i = 3
?
void f()
{
goto label;
int i;
label:
i = 3;
cout << i << endl; //prints 3 successfully
}