Não stdlib no UNIX v7?

4

Navegando pelas Fontes do v7 UNIX , percebi que não existe diretório "stdlib" - ainda mais usando um emulador v7 UNIX, não existe tal arquivo como <stdlib.h> . No entanto, funções como exit() e malloc(), realloc(), free() .etc. all existem no v7 UNIX. Também por c89 (ANSI) havia definitivamente um <stdlib.h> porque está presente em K&R ANSI Edition. Depois de algumas horas de Google-ing, eu mudo para SE :)

Então, minha pergunta é: Quando <stdlib.h> foi usado oficialmente em c? Qual é a sua história (ou seja, foi usada pelo BSD e depois incluída em c89 ?

Obrigado.

    
por Ankush 19.03.2016 / 06:45

1 resposta

3

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.

    
por 19.03.2016 / 13:44