O padrão c89 seria o lugar para procurar; sua justificativa foi publicada separadamente (e não faz parte do padrão). stdlib.h
foi uma criação do comitê que trabalha no padrão em vez de refletir a prática existente. A justificativa X3J11 diz:
The header
<stdlib.h>
was invented by the Committee to hold an assortment of functions that were otherwise homeless.
Os programas antigos têm ifdef para a inclusão de stdlib.h
, versus outros lugares como memory.h
para memcpy
, malloc
e afins.
Isso não diz que, até que o padrão seja publicado, não há stdlib.h
. Por exemplo, eu tenho uma nota em um dos meus arquivos de cabeçalho informando que o VMS 5.3 (lançado junho de 1989 ) tinha stdlib.h
:
#if defined(vms) /* VAX/VMS 5.3 */
#define HAVE_STDLIB_H 1
#define HAVE_STDARG_H 1
#undef HAVE_UNISTD_H
#define HAVE_OLD_TOKEN_SPLICE 1
#define HAVE_OLD_TOKEN_QUOTE 1
#endif
Em vez disso, as empresas que participaram do desenvolvimento do padrão incorporaram esses recursos à medida que o padrão progrediu, de modo que quando ele foi publicado, refletiu a prática existente.
No mesmo cabeçalho (e seu histórico), posso ver que o SVr3 não tinha stdlib.h
(referindo-se ao ambiente svr5.5
do Apollo), mas que aparecia "mais tarde" (provavelmente com SVr4, que estava sendo desenvolvido ao mesmo tempo que o padrão c89).
Em relação ao ponto sobre BSDs, posso ver que apareceu em 4.3Reno em 1990 (tarde demais para ser relevante). Da mesma forma, é fácil encontrar comentários que dizem que o SunOS 4 é pré-ANSI (embora eu me lembre de um compilador ANSI adicionado como uma opção bem no final do processo). Então, vamos desconsiderar os BSDs de um papel como influências nesse cabeçalho e deixá-lo como as empresas envolvidas no desenvolvimento padrão.
Por que vale a pena, a justificativa menciona marcas registradas da AT & T e da Digital Equipment Corporation.