From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.3 required=5.0 tests=BAYES_00,INVALID_MSGID autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 109fba,df854b5838c3e14 X-Google-Attributes: gid109fba,public X-Google-Thread: 1014db,df854b5838c3e14 X-Google-Attributes: gid1014db,public X-Google-Thread: 103376,df854b5838c3e14 X-Google-Attributes: gid103376,public X-Google-Thread: 10db24,fec75f150a0d78f5 X-Google-Attributes: gid10db24,public From: Bradd W. Szonye Subject: RE: ANSI C and POSIX (was Re: C/C++ knocks the crap out of Ada) Date: 1996/04/20 Message-ID: <01bb2ed5.084d0e40$65c2b7c7@Zany.localhost>#1/1 X-Deja-AN: 150608448 references: <829194658snz@tsys.demon.co.uk> <01bb2dcf.e0201620$c6c2b7c7@Zany.localhost> organization: Netcom x-netcom-date: Sat Apr 20 11:15:27 AM CDT 1996 newsgroups: comp.lang.ada,comp.lang.c,comp.lang.c++,comp.edu Date: 1996-04-20T11:15:27-05:00 List-Id: On Friday, April 19, 1996, Robert A Duff wrote... > In article <01bb2dcf.e0201620$c6c2b7c7@Zany.localhost>, > Bradd W. Szonye wrote: > >Pardon me if this sounds silly, but... > >You shouldn't have to rely on the documentation to make up for a lack of > >common sense. > > Well, sorry, but it *does* sound pretty silly, to me. Anybody who's > been around computer software for a while knows pretty well that > predicting what software does from some vague notion of "common sense" > is impossible. > > For example, common sense might tell you that function arguments are > evaluated from left to right. Not true in C, not true in Ada, not true > in C++ (there, I made it relevant to all these newsgroups, in case > anyone's still listening ;-) ). These languages all go *against* common > sense (for obscure efficiency reasons, of course). In this case, if you > rely on common sense, instead of reading the language standard, you'll > get into deep trouble. > > - Bob I don't let documents substitute for common sense. That doesn't mean I *ignore* the documentation; that would non-sensical too. Part of common sense is experience. Experience tells you that arguments get pushed (not evaluated) right-to-left. Experience tells you you can't count on what order C evaluates function arguments at all. Experience tells you that if you claim that a buffer is 1000 bytes long, it should be 1000 bytes long, even if the standard *explicitly* says that it's okay to do otherwise under certain circumstances. In general, you shouldn't use every nitpicky detail of what is and isn't legal according to the standard. Not all compilers are conformant, even if they claim to be. Compiler vendors make mistakes too, and frequently your only guarantee that a compiler is 100% conformant is the vendor's assurance that it is. I know programmers who will look up (or have memorized) the operator precedence rules in C. These programmers will always use the minimal number of parentheses in an expression because they know the rules precisely. Not everyone does; maintenance programmers in particular tend to be junior programmers who don't know all the rules. A maintenance programmer is likely to "fix" something that looks wrong, even if it isn't. And a maintenance programmer is likely to misinterpret some subtle detail of a standard that the original programmer had to look up in the first place. My personal rule: if you have to look it up to make sure you're absolutely right, your code may not be maintainable or portable. If you can do it without looking it up; if it's absolutely as clear as the nose on your face, then it's okay. For more on this, read "Writing Solid Code" by Steve Maguire (Microsoft Press).