Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Posting-Version: version B 2.10.1 6/24/83; site mtxinu.UUCP
Path: utzoo!linus!vaxine!wjh12!genrad!decvax!ucbvax!ucbtopaz!unisoft!mtxinu!ed
From: ed@mtxinu.UUCP
Newsgroups: net.lang
Subject: Re: Re: Gotos; tail-recursion - (nf)
Message-ID: <130@mtxinu.UUCP>
Date: Sun, 17-Jun-84 21:35:15 EDT
Article-I.D.: mtxinu.130
Posted: Sun Jun 17 21:35:15 1984
Date-Received: Tue, 19-Jun-84 01:41:09 EDT
References: <5400008@ea.UUCP>
Organization: mt Xinu, Berkeley
Lines: 24

While I must agree that there are no bad language constructs,
only bad uses for them, I must also say that I can often find
a valid use for a "bad" construct.  Consider the following
implementation of a debugging printf macro:

	#define	Dprintf	if(!cond); else fprintf

It can be inserted anywhere in the code.  The obvious implementation,
namely

	#define	Dprintf	if(cond) fprintf

can't be put just anywhere without affecting other statements.

While I do not think that including this construct in the
middle of the text of a program is good, it seems reasonable
to encapsule it in one place.  Then, although it may be
a confusing construct, the reader needs only to understand
it once and can then decide that it works, rather than trip
over it in several places.

-- 
Ed Gould
ucbvax!mtxinu!ed