Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!linus!philabs!cmcl2!seismo!caip!brl-adm!brl-smoke!smoke!gwyn@brl.arpa From: gwyn@brl.arpa (VLD/VMB) Newsgroups: net.lang.c Subject: Re: microsoft C considered stupid Message-ID: <1566@brl-smoke.ARPA> Date: Sun, 22-Jun-86 01:29:55 EDT Article-I.D.: brl-smok.1566 Posted: Sun Jun 22 01:29:55 1986 Date-Received: Tue, 24-Jun-86 04:00:25 EDT Sender: news@brl-smoke.ARPA Lines: 44 Alan "IBM-hater" Rosenthal posted an article flaming MicroSoft C for its "stupidity" (in his opinion). While I don't much like IBM PCs, I like ignorant flames even less. Rosenthal's posting may have confused some inexperienced C programmers, so correction may be useful. In the following, lines starting with > are Rosenthal's original remarks. >The manuals, besides being poorly and sometimes inaccurately written, >encourage all sorts of stupid things. I would like to share two things >with you. > >1. They have instituted a pre-processor conditional of the form > #if defined(MANIFEST_CONSTANT). Furthermore, the manual notes that > use of #ifdef is "discouraged" (though at least they support it). > Here in net.lang.c several C revision proposals have been rejected on > the grounds that they don't add enough to the language to merit the > inconvenience of a change. This change from #ifdef adds absolutely > nothing to the language! First, this is not a MicroSoft invention. It has been in many C compilers, including UNIX PCC, for years. (Actually it is "macro name" that is tested, not just "MANIFEST_CONSTANT".) Second, having an explicit predicate does add something over #ifdef; it is more general: #if defined(BRL) && !defined(pdp11) /* I use this a lot! */ >2. The manual does not permit something of the form: > struct tag { typedeclaration value; ... }; > although the compiler does. The manual requires that you actually > declare something with the struct. This is not a feasible restriction > on C and in fact MS C is not so restricted. It's hard to make sense of this out of context, but if it precludes struct foo { int bar 123; }; as I suspect it does ("value" smacks of initializer to me), then it is a perfectly correct restriction. >In other words, my complaint about MS C is that there are mindless restrictions >(in typical IBM style). The examples in the book are all stupid and unclear. >I don't know how I would learn C there if I hadn't first learned it here. It is not clear that Rosenthal *has* learned C or even how to read manuals. One has to admit that at least one MicroSoft C user was apparently not adequately served by their documentation; not having seen it, I don't know whether the blame for that lies with MicroSoft or with the user. But the flame was certainly off the mark.