Path: utzoo!mnetor!uunet!lll-winken!lll-tis!oodis01!uplherc!sp7040!obie!wsccs!terry From: terry@wsccs.UUCP (Every system needs one) Newsgroups: comp.lang.c Subject: Re: gotos Message-ID: <495@wsccs.UUCP> Date: 20 Apr 88 03:21:42 GMT References: <1988Apr8.183815.3187@utzoo.uucp>, <449@goofy.megatest.UUCP> <2575@ttrdc.UUCP> Lines: 107 Summary: In support of Daniel Levy and "goto"'s In article <1988Apr11.201934.20594@utzoo.uucp>, henry@utzoo.uucp (Henry Spencer) writes: > Sorry, I consider the remark well-justified and will not apologize. If > you read my other postings on the subject, you will see that I consider > the use of gotos, especially the frequent use of gotos, to be a sign of > poor organization and "coding before thinking". Given this opinion, it > is hardly surprising that I would be reluctant to buy software from an > organization which endorses routine use of gotos. #ifdef FLAME You probably don't believe in "register" or "char ***", either. A language feature is there for a reason, or it rots and falls off, much like a human cerebellum. Coding before thinking is when all your local variables are named "foo" and all your global variables are named "fee", "fie", "foe", and "fum". Your functions are named "func1", "func2", etc., and your comments consist of "Begin program" and "End program". This is the result of not thinking. Use of conditional flags which may have to be loaded from memory is thinking twice and saying "think think ... click click". The use of the "goto" statement is much profaned by ex-Pascal programmers who have almost, but not quite, seen the light. These are the same people who do: #define BEGIN { #define END. } #define END } #define REMARK(x) /* (x) */ #define THEN #define IF if and IF (cond) THEN BEGIN ... ... END They are the same people who who use if (cond) { } and #define otherwise default switch (val) { case 1: ... ... case n: otherwise: } and int function() Instead of if( cond) { } and switch( val) { case 1: ... ... case n: default: } and int function() I like to call these people NOT-C programmers (say it out loud :-) They are the people who do not realize that grep goto /usr/src/uts/3b2/*/*.c | wc yeilds: 308 992 8411 ...308 "goto"'s in the UNIX kernel. (I checked... NONE were comments). I thinks this adequately justifies the use of "goto"'s in commercial programming, at least for those programs expected to PERFORM like a commercial program. Try the following some time. Replace all your "nifty" flags with "goto" statements, and profile both versions of the code... then, disassemble both versions and grep for all branch instructions. Which has more REAL "goto"'s? #else I'm not saying that "goto"'s should be used in place of all loop flags, but it certainly seems to make code a lot more readable if you don't have to use a 264 column terminal. If you use "goto"'s in place of flags which are modified in one place only for the express purpose of avoiding a "goto", you certainly clean up the assembly code, as well. #endif | Terry Lambert UUCP: ...{ decvax, ihnp4 } ...utah-cs!century!terry | | @ Century Software OR: ...utah-cs!uplherc!sp7040!obie!wsccs!terry | | SLC, Utah | | These opinions are not my companies, but if you find them | | useful, send a $20.00 donation to Brisbane Australia... | | 'There are monkey boys in the facility. Do not be alarmed; you are secure' |