Long story short; goto
will result is a runtime jump, variable definition/declaration will result in storage allocation, compile time.
The compiler will see and decide on how much storage to allocate for an int
, it will also make so that this allocated storage will be set to 3
when “hitting” i = 3;
.
That memory location will be there even if there is a goto
at the start of your function, before the declaration/definition, just as in your example.
Very silly simile
If I place a log on the ground and my friend runs (with his eyes closed) and jumps over it, the log will still be there – even if he hasn’t seen or felt it.
It’s realistic to say that he could turn around (at a later time) and set it on fire, if he wanted to. His jump doesn’t make the log magically disappear.