ANSI C - ANSI C

ANSI C , ISO C e Standard C são padrões sucessivos para a linguagem de programação C publicados pelo American National Standards Institute (ANSI) e pela International Organization for Standardization (ISO). Historicamente, os nomes se referiam especificamente à versão original e com melhor suporte do padrão (conhecido como C89 ou C90 ). Os desenvolvedores de software que escrevem em C são incentivados a obedecer aos padrões, pois isso ajuda a portabilidade entre compiladores.

História e perspectivas

O primeiro padrão para C foi publicado pela ANSI. Embora este documento tenha sido posteriormente adotado pela Organização Internacional de Padronização (ISO) e as revisões subsequentes publicadas pela ISO tenham sido adotadas pela ANSI, "ANSI C" ainda é usado para se referir ao padrão. Enquanto alguns desenvolvedores de software usam o termo ISO C, outros são neutros e usam o Padrão C.

Padronizando C

Em 1983, o American National Standards Institute formou um comitê, X3J11, para estabelecer uma especificação padrão de C. Em 1985, o primeiro Standard Draft foi lançado, às vezes referido como C85 . Em 1986, outro Draft Standard foi lançado, às vezes referido como C86 . O pré-lançamento Standard C foi publicado em 1988 e às vezes referido como C88 .

C89

O padrão ANSI foi concluído em 1989 e ratificado como ANSI X3.159-1989 "Linguagem de Programação C". Esta versão da linguagem é freqüentemente chamada de "ANSI C". Mais tarde, às vezes, o rótulo "C89" é usado para distingui-lo do C90, mas usando o mesmo método de rotulagem.

C90

O mesmo padrão que C89 foi ratificado pela Organização Internacional de Padronização como ISO / IEC 9899: 1990, com apenas alterações de formatação, que às vezes é referido como C90. Portanto, os termos "C89" e "C90" referem-se essencialmente à mesma linguagem.

Este padrão foi retirado por ANSI / INCITS e ISO / IEC.

C95

Em 1995, a ISO publicou uma extensão, chamada Emenda 1, para o padrão ANSI-C. Seu nome completo finalmente era ISO / IEC 9899: 1990 / AMD1: 1995 ou apelidado de C95 . Além da correção de erros, houve outras alterações nos recursos de linguagem, como:

  • Suporte a caracteres amplos e multibyte aprimorado na biblioteca padrão, introduzindo <wchar.h>e <wctype.h>, bem como I / O multibyte
  • Adição de dígrafos ao idioma
  • Especificação de macros padrão para a especificação alternativa de operadores, por exemplo, andpara&&
  • Especificação da macro padrão __STDC_VERSION__

Além da alteração, duas retificações técnicas foram publicadas pela ISO para C90:

  • ISO / IEC 9899: 1990 / Cor 1: 1994 TCOR1 em 1994
  • ISO / IEC 9899: 1990 / Cor 2: 1996 em 1996

Teste de pré-processador para compatibilidade com C95

#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199409L

/* C95 compatible source code. */
#elif defined(__STDC__)
/* C89 compatible source code. */
#endif

C99

Em março de 2000, o ANSI adotou o padrão ISO / IEC 9899: 1999. Esse padrão é comumente referido como C99. Algumas adições notáveis ​​ao padrão anterior incluem:

Três retificações técnicas foram publicadas pela ISO para C99:

  • ISO / IEC 9899: 1999 / Cor 1: 2001 (E)
  • ISO / IEC 9899: 1999 / Cor 2: 2004 (E)
  • ISO / IEC 9899: 1999 / Cor 3: 2007 (E), notável por descontinuar a função de biblioteca padrão get

Este padrão foi retirado por ANSI / INCITS e ISO / IEC em favor do C11.

C11

C11 foi oficialmente ratificado e publicado em 8 de dezembro de 2011. Recursos notáveis ​​incluem suporte Unicode aprimorado , expressões genéricas de tipo usando a nova _Genericpalavra-chave, uma API multi-threading de plataforma cruzada ( threads.h) e suporte a tipos atômicos na linguagem principal e na biblioteca ( stdatomic.h)

Uma retificação técnica foi publicada pela ISO para C11:

  • ISO / IEC 9899: 2011 / Cor 1: 2012

C17

Em outubro de 2018, "C17" é o atual padrão para a linguagem de programação C .

C17 aborda defeitos em C11 sem introduzir novos recursos de linguagem.

C2x

C2x é um nome informal para a próxima revisão principal da linguagem C (após C17 ) .

Outras publicações ISO relacionadas

Como parte do processo de padronização, a ISO também publica relatórios técnicos e especificações relacionadas à linguagem C:

  • ISO / IEC TR 19769: 2004, em extensões de biblioteca para suportar formatos de transformação Unicode, integrado em C11
  • ISO / IEC TR 24731-1: 2007, em extensões de biblioteca para suportar interfaces verificadas por limites, integrado em C11
  • ISO / IEC TR 18037: 2008, em extensões C incorporadas
  • ISO / IEC TR 24732: 2009, em aritmética de ponto flutuante decimal , substituído por ISO / IEC TS 18661-2: 2015
  • ISO / IEC TR 24747: 2009, sobre funções matemáticas especiais,
  • ISO / IEC TR 24731-2: 2010, em extensões de biblioteca para suportar funções de alocação dinâmica
  • ISO / IEC TS 17961: 2013, sobre codificação segura em C
  • ISO / IEC TS 18661-1: 2014, em IEC 60559: 2011 - aritmética de ponto flutuante binário compatível
  • ISO / IEC TS 18661-2: 2015, em IEC 60559: 2011 compatível com aritmética de ponto flutuante decimal
  • ISO / IEC TS 18661-3: 2015, no intercâmbio compatível com IEC 60559: 2011 e tipos de ponto flutuante estendido
  • ISO / IEC TS 18661-4: 2015, em IEC 60559: 2011 - funções suplementares compatíveis

Mais especificações técnicas estão em desenvolvimento e com aprovação pendente, incluindo a quinta e última parte do TS 18661, uma especificação de memória transacional de software e extensões de biblioteca paralela.

Suporte dos principais compiladores

ANSI C agora é suportado por quase todos os compiladores amplamente usados. GCC e Clang são os dois principais compiladores C populares hoje, ambos são baseados no C11 com atualizações incluindo mudanças de especificações posteriores, como C17 e C18. Qualquer código-fonte escrito apenas em C padrão e sem quaisquer suposições dependentes de hardware é virtualmente garantido para compilar corretamente em qualquer plataforma com uma implementação C em conformidade. Sem tais precauções, a maioria dos programas pode compilar apenas em uma determinada plataforma ou com um compilador particular, devido, por exemplo, ao uso de bibliotecas não padrão, como bibliotecas GUI , ou à dependência de atributos específicos do compilador ou da plataforma como o tamanho exato de certos tipos de dados e endianness byte .

Detectabilidade de conformidade

Para atenuar as diferenças entre K&R C e o padrão ANSI C, a __STDC__macro ("padrão c") pode ser usada para dividir o código em seções ANSI e K&R.

 #if defined(__STDC__) && __STDC__
 extern int getopt(int, char * const *, const char *);
 #else
 extern int getopt();
 #endif

No exemplo acima, um protótipo é usado em uma declaração de função para implementações em conformidade com ANSI, enquanto uma declaração obsoleta de não protótipo é usada de outra forma. Eles ainda são compatíveis com ANSI a partir de C99. Observe como este código verifica a definição e a avaliação: isso ocorre porque algumas implementações podem ser definidas __STDC__como zero para indicar não conformidade com ANSI.

Compiladores que suportam ANSI C

Veja também

Referências

  1. ^ Brad Kelechava (2016/09/14). "A origem de ANSI C e ISO C" . Página visitada em 14/08/2018 .
  2. ^ Richard Hale Shaw (setembro de 1988). "Padrão C: O rascunho ANSI cresce". Revista PC . Vol. 7 não. 15. pp. 116-117.
  3. ^ "Padrões - Usando a GNU Compiler Collection (GCC)" . Página visitada em 2012-06-24 .
  4. ^ "INCITS / ISO / IEC 9899" . www.techstreet.com . Página visitada em 03/10/2018 .
  5. ^ "ISO / IEC 9899: 1990 - Linguagens de programação - C" . Página visitada em 2012-06-24 .
  6. ^ Clive DW Feather (12/09/2010). "Uma breve descrição do Adendo Normativo 1" .
  7. ^ "ISO / IEC 9899: 1990 / Amd 1: 1995" . Organização Internacional para Padronização. 22/03/2013.
  8. ^ "ISO / IEC 9899: 1990 / Cor 1: 1994" . ISO . Obtido em 21/01/2019 .
  9. ^ "ISO / IEC 9899: 1990 / Cor 2: 1996" . ISO . Obtido em 21/01/2019 .
  10. ^ 14: 00-17: 00. "ISO / IEC 9899: 1999" . ISO . Obtido em 21/01/2019 .CS1 maint: nomes numéricos: lista de autores ( link )
  11. ^ "INCITS / ISO / IEC 9899-2012" . ANSI.
  12. ^ "ISO / IEC 9899: 1999 - Linguagens de programação - C" . Página visitada em 2012-06-24 .
  13. ^ "ISO / IEC 9899: 2011 / Cor 1: 2012" . Organização Internacional para Padronização.
  14. ^ "ISO / IEC 9899: 2018 - Tecnologia da informação - Linguagens de programação - C" . www.iso.org .
  15. ^ "O padrão - C" . www.iso-9899.info .
  16. ^ "História de C" . cppreference .
  17. ^ "ISO / IEC TR 19769: 2004" . Organização Internacional para Padronização.
  18. ^ "ISO / IEC TR 24731-1: 2007" . Organização Internacional para Padronização.
  19. ^ "ISO / IEC TR 18037: 2008" . Organização Internacional para Padronização.
  20. ^ "ISO / IEC TR 24732: 2009" . Organização Internacional para Padronização.
  21. ^ "ISO / IEC TR 24747: 2009" . Organização Internacional para Padronização.
  22. ^ "ISO / IEC TR 24731-2: 2010" . Organização Internacional para Padronização.
  23. ^ "ISO / IEC TS 17961: 2013" . Organização Internacional para Padronização.
  24. ^ "ISO / IEC TS 18661-1: 2014" . Organização Internacional para Padronização.
  25. ^ "ISO / IEC TS 18661-2: 2015" . Organização Internacional para Padronização.
  26. ^ "ISO / IEC TS 18661-3: 2015" . Organização Internacional para Padronização.
  27. ^ "ISO / IEC TS 18661-4: 2015" . Organização Internacional para Padronização.
  28. ^ Veja uma lista em https://en.cppreference.com/w/c/experimental Visitado em 16 de janeiro de 2016.
  29. ^ "Usando a Coleção de Compiladores GNU (GCC): Padrões" . gcc.gnu.org . Recuperado em 05/02/2019 .
  30. ^ "Compatibilidade de idioma" . clang.llvm.org . Recuperado em 05/02/2019 .
  31. ^ "Nomes de macro predefinidos padrão" . www.ibm.com . Recuperado em 10/04/2019 .
  32. ^ "Pacote do desenvolvedor HP C / ANSI C" . Página visitada em 12/07/2015 .
  33. ^ Suporte para ISO C11 adicionado aos compiladores IBM XL C / C ++
  34. ^ link para as páginas do Pelles C

Leitura adicional

  • Schreiner, Axel-Tobias (1993). Programação orientada a objetos com ANSI-C . Hanser. ISBN 3-446-17426-5.

links externos