goto and Labels#
Structured Programming vs. goto#
Structured programming:
Only controlled program flow
Loops and branches
At most
breakandcontinueOnly one level concerned
goto is the exact opposite
Jump statement out of 10 nested loops
⟶ Massacre
Edsger Dijkstra, 1968: “Goto Considered Harmful”
⟶ Plea for structured programming
goto: Definition#
C offers easy ways to do what you want
Dennis Ritchie: “There is no spirit of C!”
Jörg Faschingbauer: there is!
Definition of goto:
goto label;labelis the name of a place inside the function⟶
labelis only locally visibleNaming rules: like a variable
gotocan jump to arbitrary places inside the function
goto: Use Cases#
Manifold, but …
|
int do_complicated_stuff(void)
{
while (...) {
...
for (...) {
if (error)
goto out;
}
}
return 0;
out:
cleanup_mess();
return -1;
}
|