В моем сознании, всегда, определение означает распределение памяти.
В следующем коде 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
}