From mboxrd@z Thu Jan 1 00:00:00 1970 From: ron@ronnatalie.com (Ronald Natalie) Date: Mon, 27 Oct 2014 16:35:57 -0400 Subject: [TUHS] speaking of early C compilers In-Reply-To: <2c9c14d6fd7d2e98ae0bc98d7f593ff9.squirrel@webmail.yaccman.com> References: <0F0B9BFC06289346B88512B91E55670D2F86@EXCHANGE> <2c9c14d6fd7d2e98ae0bc98d7f593ff9.squirrel@webmail.yaccman.com> Message-ID: The original UNIX system calls returned error by setting the CARRY ("C") bit on the PSW. It was the little wrapper to make them C callable that mapped that to -1. Yes, there was much cleanup going to Version 7 to get rid of using -1 with pointers in lieu of the null pointer. The original argv list was terminated with a -1 as well. Not that loading from *(int*) 0 was ever a good idea. On the PDP-11, you got garbage...specifically the first few instructions of the program, the first of which was "setd" and if you did "printf("%s\n", 0), you got something like "p&P6" printed out. Some idiot decided in the split I/D mode (and later on the VAX) to put a ZERO at location zero. This led to a lot more sloppy coding. We moved to the Gould SEL machines and like your machine, the default was to get a trap on *(int*)0 as there was nothing mapped there. We subsequently added a flag to the a.out format that changed this behavior (called "braindamaged vax compatibility mode") to map a zero at zero for the few programs we only had in binary form and we couldn't fix their errant behavior. > > The cast syntax, arguably one of the ickiest parts of C syntax, was > invented in desperation -- we needed the feature, and there was no good > syntax proposal. I blush to admit that the one Dennis chose is one that I > suggested, largely because (unlike some of the others) it was easy to > implement in Yacc. Yep, the problem was that the book said that a cast was to perform the same operation as assigning a value to an invented temporary of the cast type. This of course, didn't fully explain it in the case of some cast behavior. C++ had to devolve the C cast into FIVE different kinds of cast to make it sane.