Funny you should ask. Im at a conference with Steve Bourne. He brought up this topic in a fireside chat tonight. Steve claims around 1977/78, he had started to bug Dennis about creating the void type which Bourne wanted for the Algol68 implementation and was originally rejected by dmr.
BuT when he finally showed Dennis that adding it saved an instruction in the C return by allowing the void type for function returns, the void type was added to the language. Once the type was created it was quickly realized as useful as typing hard started to become more important in the kernel.
On Sat, Nov 4, 2017 at 3:23 AM Paul Ruizendaal <
pnr@planet.nl> wrote:
I’m trying to understand the origins of void pointers in C. I think they first appeared formally in the C89 spec, but may have existed in earlier compilers.
Of course, as late as V7 there wasn’t much enforcement of types and hence no need for the void* concept and automatic casting. I suppose ‘lint’ would have flagged it though.
In the 4BSD era there was caddr_t, which I think was used for pretty much the same purposes. Did ‘lint’ in the 4BSD era complain about omitted casts to and fro’ caddr_t?
Background to my question is research into the evolution of the socket API in 4.1x BSD and the persistence of ‘struct sockaddr *’ in actual code, even though the design papers show an intent for ‘caddr_t’ (presumably with ‘void*’ semantics, but I’m not sure).
Paul