Citat:
Ursprungligen postat av mongomannen
Nu handlade ju iofs tråden om goto i c++, och standarden garanterar korrekt stack-unwinding vid användning av goto. Och som FaderBerg sa ovan, du kan inte hoppa mellan två funktionsblock med goto.
Det största problemet med goto är saker som t.ex
Kod:
int main()
{
int a = 1;
if(a)
goto skip_b;
int b = 2;
skip_b:
int c = a * b;
return 0;
}
GCC ger ett kompileringsfel, och om jag minns rätt ska inte standarden tillåta såna saker. MSVC ger inte ens en varning på standardvarningsnivån.
Är du säker på att koden verkligen kompilerar med MSVC?
C++ standarden säger under 6.7.3:
"It is possible to transfer into a block, but not in a way that bypasses declarations with initialization. A program that jumps from a point where a local variable with automatic storage duration is not in scope to a point where it is in scope is ill-formed unless the variable has POD type and is declared without an initializer."
ps. Anmärk att detta verkar vara tillåtet enligt C-standarden så det är mycket möjligt att du har stött på en MSVC "language extension" för PODs (MSVC är inte en renodlad C eller C++ kompilator utan plockar lite från båda världarna). Du bör kompilera med "/Za" flaggan för att undvika sådant (i.e. i stil med GCC's "-ansi"/"-pedantic").