Hi Adam, On Sat, Jan 10, 2026 at 10:32:30PM +0000, Adam Sampson wrote: > Alejandro Colomar writes: > > > I think 'void*' is important enough that it would be useful to dig in > > its history further. Was it an invention of C89? Or was it an > > extension in some existing compilers? If the latter, it would be > > interesting to document which systems had it before C89. > > From evidence in the utzoo Usenet archive, the idea was around before > the ANSI C effort. > > The first mention of "void *" is in November 1982, where Ken Dalka > (ihuxe!dalka) observed in net.lang.c that void * was accepted as a type. > He didn't say which compiler was being used, but an earlier post said > ihuxe "runs USG 4.0 UN*X". Huh, would this be the "System IV" that was never externally released? The year seems consistent with that. Interesting! According to , the official name of this would be PWB 4.0. or Unix/TS 4.0. Should we document it as Unix/TS 4.0? This predates the C Committee by one year, BTW. It would also be useful to know when the BSD lineage incorporated void*. > The next is from Mary Ann Horton (mark@cbosgd.UUCP) in January 1984, > also in net.lang.c, who suggests using "(void *) 0" as a definition of > NULL, giving a varargs function with args terminated by NULL as an > example. > > Then in March 1984, Doug Gwyn (gwyn@Brl-Vld.ARPA) says, as part of a > discussion about casting the result of malloc in net.unix-wizards: > > > The C Language Standards Committee was talking about adding > > (void *) to the language as a generic pointer type. Perhaps > > that will eventually help... > > It then shows up in various posts in both of those groups throughout > 1984, including a summary by Henry Spencer in June 1984 of Larry > Rosler's presentation on the ANSI C project at Usenix saying: > > > II. "void *" is a new kind of pointer, which cannot be dereferenced but > > can be assigned to any other type of pointer without a cast. The > > idea here is that "char *" is no longer required to be the > > "universal" pointer type which can point to anything. So for > > example, the declaration of fread earlier really should go: > > > > extern int fread(void *, int, int, FILE *); > > > > (People who have machines where all pointers have the same > > representation, don't complain. You are lucky. Others aren't.) > > Thanks, Thanks a lot! Have a lovely day! Alex --