4 ms·
TL;DR: Legacy code with gotos in it.
by joshguthrie 14y ago
TL;DR: Legacy code with gotos in it.
- dwyer 14y agoWay to nitpick about goto while completely overlooking the obvious buffer overflow.
- metaphorm 14y agothats not an inappropriate use of gotos either. they're in the same function, just a few lines down, and are just used to improve the safety and efficiency of the code. in fact thats the textbook case of the only time when a goto is actually a good idea.
- UnoriginalGuy 14y agoIt is C, of course it is going to have goto's in it. How else are you going to handle error conditions? Copy and paste the error code a dozen times within a single function? (hint: C doesn't support exceptions) You could use longjmp/setjmp but those have a lot of the same issues that people claim goto has. In fact worse in several ways, since while goto makes it hard to follow the program flow, longjmp makes it /impossible/.
- derleth 14y ago> since while goto makes it hard to follow the program flow, longjmp makes it /impossible/. Only if you don't use it tastefully. It can be a nice way to bail out of a recursive function with an error code, which is precisely how I've used it. Really, it looks exactly the same as a try ... catch block in that C++/Java/C# language everyone's on about now.
- 4ad 14y agoSetjmp is great for reseting a state machine, and many things are modeled as state machine.
- joshguthrie 14y agoNo exceptions? What a conondrum I find myself faced with... What about this snippet: if (error_return) { printf("My error"); return; } Clearer than a goto, no? And see, no exceptions ma'! (Oh yeah, and longjmp/setjmp are the worst ideas in the world...)