Igazad (is) van. :)
Nyelvspecifikus kontextusban valószínűleg a fordító rögtön dobja a hibát, ha ki akarsz ugrani a struktúrából. Sajnos nem tudtam arról leszokni, hogy mindent assembler szinten értelmezzek. Ha eltekintünk a C/C++ szabványos eszközeitől, akkor természetesen bármilyen goto elképzelhető. Viszont ekkor alá kell nyúlni a rendszernek és nem lesz hordozható.
A "goto==tilos" szabály nevetségesnek tűnik, ha tudod mi van belül. A híres struktúrált programozás kb. így néz ki:
f(X)
{
if(X)
{
body
}
}Az implementáció - a "magasszintű nyelvek támogatása" miatt meg így:
[előkészítés1]
[előkészítés2]
(call) f(X)
[feltakarítás1]
...
f(X)
{
[előkészítés]
if(!X)
goto exit
body
exit:
[feltakarítás]
}
A szögletes zárójelben levő tevékenységek nyelvi szinten rejtettek. A longjmp segítségével megúszod ezeknek a ismeretét és kezelését. Az 1 indexű elemek meg elhagyhatók az "isolated call" pragmával.
Hát ettől lassabb egy magasszintű nyelv és még lassabb, ha egy olyan mcu-t is C-ben kell programozni, amelyikben nincs univerzális stack, ezért szoftverből kell emulálni.