Path: utzoo!attcan!uunet!lll-winken!lll-ncis!helios.ee.lbl.gov!pasteur!agate!bionet!ig!arizona!mike From: mike@arizona.edu (Mike Coffin) Newsgroups: comp.std.c Subject: Re: __STDC__ and non-conforming ANSI C compilers Message-ID: <8741@megaron.arizona.edu> Date: 17 Jan 89 20:25:17 GMT References: <9405@smoke.BRL.MIL> Organization: U of Arizona CS Dept, Tucson Lines: 45 From article <9405@smoke.BRL.MIL>, by gwyn@smoke.BRL.MIL (Doug Gwyn ): >>3) I suppose there is a need to determine whether the compiler is >> exactly "conforming", although I'm not sure what you would do if it >> wasn't. But the need is far more pressing for a flag that answers >> the question "is this a K&R compiler or an ANSI compiler?" How do >> we tell the difference between a K&R compiler and an ANSI compiler >> that is invoked in such a way that it's nonconforming? (E.g., >> "cc -DFOO".) Does the standard say anything about this? Shouldn't >> we adopt some convention before we have chaos? > > I don't know what you mean by a "K&R compiler". Existing UNIX compilers > do not conform to either K&R or the pANS. From my perspective, the MOST > important distinction is between C environments that follow the Standard > (in which case I know EXACTLY what to expect) and ones that don't. The > latter category is just as messed up as it has ALWAYS been, and no > single test is sufficient to untangle THAT mess. However, we should > adhere very strictly to the use of __STDC__ to distinguish between the > well-defined case and the myriad of random implementations. Dragging > __STDC__ into the morass merely ruins its utility; it doesn't help the > user of an uncontrolled C environment to determine anything reliable. Thanks for the answers, most of which I'll buy. This one I still have trouble with. I still say, the most important distinction is between C environments that "essentially" follow K&R and those that "essentially" follow pANS. I will grant you that "essentially" is an imprecise term, but this is still the important question. (I can't define a K&R compiler, but I know one when I see it :-) Previous implementations of C adhered more or less to one (de facto) standard, future ones will adhere more or less to pANS. In a lot of situations I want to know which. E.g. * should I use function prototypes? * can I assume that parenthesis will control evaluation order? * how do I splice tokens? * should I include or ? These are practical problems, for which I see no solution at the moment. Strict compliance isn't something that buys me much. I don't have much use for a flag that will get turned off if the compiler is invoked with "cc -DDEBUG". Where will I use it? -- Mike Coffin mike@arizona.edu Univ. of Ariz. Dept. of Comp. Sci. {allegra,cmcl2}!arizona!mike Tucson, AZ 85721 (602)621-2858