Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!mnetor!seismo!umcp-cs!chris From: chris@umcp-cs.UUCP (Chris Torek) Newsgroups: net.lang.c Subject: Re: e1?(void_e2):(void_e3) Message-ID: <2938@umcp-cs.UUCP> Date: Wed, 13-Aug-86 23:01:01 EDT Article-I.D.: umcp-cs.2938 Posted: Wed Aug 13 23:01:01 1986 Date-Received: Thu, 14-Aug-86 08:27:02 EDT References: <155@cbnap.UUCP> <499@dg_rtp.UUCP> <518@hadron.UUCP> <243@desint.UUCP> Reply-To: chris@umcp-cs.UUCP (Chris Torek) Organization: University of Maryland, Dept. of Computer Sci. Lines: 46 In article <243@desint.UUCP> geoff@desint.UUCP (Geoff Kuenning) writes: >... let us not forget that there is *no* reason to ever write this >particular expression. Anywhere it's useful, you can just write > > if (e1) > void_e2; > else > void_e3; Not so! The above is a statement, while `e1 ? void_e2 : void_e3' is an expression; and expressions are useful in macros: #define strange() ((e1 ? void_e2 : void_e3), arbitrary_e4) Using #define strange() if (e1) void_e2; else void_e3; arbitrary_e4 means that if (x) strange(); else ... no longer works. As a last resort, I now use the following for inline functions returning void: #ifdef lint #define _false_ rand() #else #define _false_ 0 #endif #define strange() \ do { \ s1; \ ... \ sn; \ } while (_false_) The funny `_false_' keeps lint from warning about constants in conditional contexts. -- In-Real-Life: Chris Torek, Univ of MD Comp Sci Dept (+1 301 454 1516) UUCP: seismo!umcp-cs!chris CSNet: chris@umcp-cs ARPA: chris@mimsy.umd.edu