Path: utzoo!attcan!uunet!husc6!bloom-beacon!mcgill-vision!mouse From: mouse@mcgill-vision.UUCP (der Mouse) Newsgroups: comp.lang.c Subject: Re: Array indexing vs. pointers... Message-ID: <1318@mcgill-vision.UUCP> Date: 1 Oct 88 09:54:00 GMT References: <8809191521.AA17824@ucbvax.Berkeley.EDU> <68995@sun.uucp> <607@ardent.UUCP> Organization: McGill University, Montreal Lines: 72 In article <607@ardent.UUCP>, mec@ardent.UUCP (Michael Chastain) writes: > /* Array */ > for ( iArg = 1; iArg < argc; iArg++ ) > ProcessArg( argv[iArg] ); > /* Pointer */ > while ( --argc ) > ProcessArg( *++argv ); > I find the first version more writeable. More debuggable. More > readable. And more likely to be correct *the first time*. Your first two words are the most telling: "I find". > If you had to debug this code with a typical sdb-like debugger, which > would you rather look at? "iArg" or "argv"? I would generally shut off the symbolic nonsense and look at offsets from the argument pointer. I don't trust compilers to produce code corresponding to what I wrote any longer. But I would rather look at the pointer version, if you really want to know. > Suppose you told your boss: "my next project will be: > -- 20% sooner > -- 20% cleaner > -- 30% less bugs > -- 5% larger > -- 5% slower (in non-real-time-critical areas)" > What do you think he or she would say? He probably wouldn't care. Next question? :-) But also, I fail to see how forcing myself to code in a style I find unnatural[*] is going to bring any of the improvements from the above list. It most certainly won't bring the first two. [*] Not to imply a value judgement; just because it's not natural for me doesn't mean a thing about anyone else. This also is not to say that I don't use [] notation. I do, sometimes. De gustibus non est disputandum, or whatever it's supposed to be (my knowledge of Latin is right down there with my knowledge of COBOL). > #if FLAME > The last word for you efficiency geeks: > #if BIG_COMPUTER > My array code vectorizes more easily than your > pointers-that-might-be-aliased code. So while you're saving a cycle > here, a cycle there, I'm getting 400% performance improvements just > by recompiling. > #endif Only if your compiler supports noalias or moral equivalent, to allow you tell it that your arrays aren't aliased either. And in that case, I can tell it my pointers aren't aliased.... > #if INTEL_8086 > ....a normal 32-bit pointer.... I was under the impression that a "normal" pointer on the 8086 was 16 bits. Of course, I don't stoop that low very often[%], so I can't claim great familiarity with it. [%] I *do* mean to imply a value judgement here. I think the 8086 is a horrible machine to have to program. > #endif FLAME der Mouse old: mcgill-vision!mouse new: mouse@larry.mcrcim.mcgill.edu