( bucko | 2018. 02. 22., cs – 15:38 )

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.