Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!watmath!clyde!burl!ulysses!allegra!mit-eddie!genrad!decvax!tektronix!teklds!dadla!tekla!robertv From: robertv@tekla.UUCP (Robert Vetter) Newsgroups: net.lang.c Subject: Re: An amusing piece of code Message-ID: <487@tekla.UUCP> Date: Sun, 6-Apr-86 18:36:57 EST Article-I.D.: tekla.487 Posted: Sun Apr 6 18:36:57 1986 Date-Received: Mon, 21-Apr-86 04:30:55 EST References: <1370@ism780c.UUCP> Reply-To: robertv@tekla.UUCP (Robert Vetter) Organization: Tektronix, Inc., Beaverton, OR. Lines: 78 In article <1370@ism780c.UUCP> tim@ism780c.UUCP (Tim Smith) writes: >Here is an amusing piece of code that someone who wants to remain >annonymous invented. > >The situation is that we have something that, if written with if-then-else >would be > > if ( thing == A ) > A-code; > else > if ( thing == B || thing == C || thing == D ) { > switch ( thing ) { > case B: B-code; break; > case C: C-code; break; > case D: D-code; break; > } > BCD-common-code; > } else > if ( thing == E ) > E-code; > >A, B, C, D, and E are constant expressions, so this is not elegant. >We would like to use a switch for everything. Here is a solution: > > switch ( thing ) { >case A: A-code; break; >case B: B-code; if ( 0 ) { >case C: C-code; if ( 0 ) { >case D: D-code; }} > BCD-common-code; break; >case E: E-code; > } > >Noone here has been able to come up with a reasonable style for this. The >example above is not to bad, but if B-code, C-code, etc, are complicated, >then it starts to get ugly. > > >-- > >Tim Smith sdcrdcf!ism780c!tim || ima!ism780!tim || ihnp4!cithep!tim > >PS: I bet you were relieved that I didn't say you invented this, right Darryl? Why not : switch ( thing ) { case A: A-code; break; case B: B-code; BCD-common-code(); break; case C: C-code; BCD-common-code(); break; case D: D-code; BCD-common-code(); break; case E: E-code; } It's structured and readable. Rob Vetter (503) 629-1291 [ihnp4, ucbvax, decvax, uw-beaver]!tektronix!tekla!robertv "Waste is a terrible thing to mind" - NRC (Well, they COULD have said it)