ANSI C - ANSI C


Da Wikipédia, a enciclopédia livre

ANSI C , ISO C e Padrão C referem-se às normas sucessivas para a linguagem de programação C publicado pelo American National Standards Institute (ANSI) e da Organização Internacional de Normalização (ISO). Historicamente, os nomes que se refere especificamente à versão original e best-suportada do padrão (conhecido como C89 ou C90 ). Os desenvolvedores de software que escrevem em C são encorajados a conformidade com as normas, pois isso ajuda a portabilidade entre compiladores.

História e perspectivas

O primeiro padrão para C foi publicado pela ANSI. Embora este documento foi aprovado pela International Organization for Standardization (ISO) e revisões posteriores publicados pela ISO foram adotadas por ANSI, "ANSI C" ainda é usado para se referir ao padrão. Enquanto alguns desenvolvedores de software usam o termo ISO C, outros são normas-corpo neutro e usar padrão C.

C89

Em 1983, o American National Standards Institute formou uma comissão, X3J11, para estabelecer uma especificação de padrão de C. O padrão foi concluída em 1989 e ratificado como ANSI X3.159-1989 "linguagem de programação C." Esta versão da linguagem é muitas vezes referida como "ANSI C". Mais tarde, por vezes, o rótulo "C89" é usado para distingui-lo de C99 mas usando o mesmo método de marcação.

C90

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

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

C95

Em 1995, a norma ISO publicada uma extensão, chamado Alteração 1, para o padrão ANSI-C. Seu nome completo finalmente foi ISO / IEC 9899 / AMD1: 1995 ou apelidado de C95 . Além da correção de erro houve mais alterações nas capacidades linguísticas, tais como:

  • Melhoria de multi-byte e caractere largo apoio na biblioteca padrão, introduzindo <wchar.h>e <wctype.h>, bem como multi-byte de I / O
  • Além de dígrafos com o idioma
  • Especificação de macros padrão para a especificação alternativa de operadores, por exemplo andpor&&
  • Especificação da macro standard __STDC_VERSION__

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

  • ISO / IEC 9899 TCOR1 em 1995
  • ISO / IEC 9899 TCOR2 em 1996

teste de pré-processador para compatibilidade C95

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

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

C99

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

Três rectificações técnicas foram publicados 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 depreciativo a função de biblioteca padrão fica

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

C11

A partir de 2018, "C11" é o anterior padrão para a linguagem de programação C . As características notáveis introduzidas ao longo da revisão anterior incluem a melhoria Unicode suporte, expressões de tipo genérico usando a nova _Genericpalavra-chave, um multi-plataforma multi-threading API ( threads.h) e atômicas tipos apoiar tanto em linguagem principal ea biblioteca ( stdatomic.h).

Uma rectificação técnica foi publicada por ISO para C11:

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

C18

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

Outras publicações ISO relacionados

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

  • ISO / IEC TR 19769: 2004, em extensões de biblioteca para suportar formatos de transformação Unicode, integrado no C11
  • ISO / IEC TR 24731-1: 2007, em extensões da biblioteca para suportar interfaces Bounds-verificados, integrados C11
  • ISO / IEC TR 18037: 2008, em extensões C incorporados
  • ISO / IEC TR 24732: 2009, em decimal ponto flutuante aritmética, substituído pelo norma ISO / IEC 18661-2 TS: 2015
  • ISO / IEC TR 24747: 2009, em funções matemáticas especiais,
  • ISO / IEC TR 24731-2: 2010, em extensões de biblioteca para apoiar as funções de alocação dinâmica
  • ISO / IEC TS 17961: 2013, em codificante protegido em C
  • ISO / IEC 18661-1 TS: 2014, em IEC 60559: 2011 -compatível binário de ponto flutuante aritmética
  • ISO / IEC 18661-2 TS: 2015, na norma IEC 60559: 2011-compatível decimal ponto flutuante aritmética
  • ISO / IEC 18661-3 TS: 2015, na norma IEC 60559: 2011 intercâmbio-compatível e estendidos tipos de ponto flutuante
  • ISO / IEC TS 18661-4: 2015, no IEC 60559: funções suplementares 2011-compatíveis

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

Apoio de grandes compiladores

ANSI C é agora suportado por quase todos os compiladores amplamente utilizados. A maioria do código C sendo escrito hoje em dia é baseado em ANSI C. Qualquer programa escrito única no padrão C e sem quaisquer suposições dependentes de hardware é praticamente garantido para compilar corretamente em qualquer plataforma com uma implementação C conformes. Sem tais precauções, a maioria dos programas pode compilar somente em um determinado plataforma ou com um compilador particular, devido, por exemplo, com a utilização de bibliotecas de não-convencionais, tais como GUI bibliotecas, ou para a dependência de atributos compiler- ou específicos da plataforma tais como o tamanho exacto de certos tipos de dados e de bytes ordenação .

detectabilidade Compliance

Para atenuar as diferenças entre K & R C e o padrão ANSI C, o __STDC__( "padrão c") de macro pode ser usado para dividir o código em ANSI e secções 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 é utilizado em uma declaração de função para compatíveis implementações ANSI, enquanto uma declaração não-protótipo obsolescente é utilizado de outro modo. Aqueles que ainda estão ANSI-compliant como de C99. Observe como esse código verifica tanto definição e avaliação: isso é porque algumas implementações pode definir __STDC__a zero para indicar a conformidade não-ANSI.

Compiladores apoio ANSI C

Veja também

Referências

  1. ^ Brad Kelechava (2017/09/14). "A origem de ANSI C e ISO C" . Retirado 2018/08/14 .
  2. ^ "Normas - Usando o GNU Compiler Collection (GCC)" . Retirado 2012-06-24 .
  3. ^ "INCITS / ISO / IEC 9899" . www.techstreet.com . Retirado 2018/10/03 .
  4. ^ "ISO / IEC 9899: 1990 - Linguagens de Programação - C" . Retirado 2012-06-24 .
  5. ^ Clive DW Pena (2010-09-12). "Uma breve descrição da Normativa Adenda 1" .
  6. ^ "ISO / IEC 9899: 1990 / Amd 1: 1995" . Organização Internacional para Padronização. 2013/03/22.
  7. ^ "INCITS / ISO / IEC 9899-2012" . ANSI.
  8. ^ "ISO / IEC 9899: 1999 - Linguagens de Programação - C" . Retirado 2012-06-24 .
  9. ^ "ISO / IEC 9899: 2011 / Cor 1: 2012" . Organização Internacional para Padronização.
  10. ^ "ISO / IEC 9899: 2018 - Tecnologia da informação - Linguagens de Programação - C" . www.iso.org .
  11. ^ "ISO / IEC TR 19769: 2004" . Organização Internacional para Padronização.
  12. ^ "ISO / IEC TR 24731-1: 2007" . Organização Internacional para Padronização.
  13. ^ "ISO / IEC TR 18037: 2008" . Organização Internacional para Padronização.
  14. ^ "ISO / IEC TR 24732: 2009" . Organização Internacional para Padronização.
  15. ^ "ISO / IEC TR 24747: 2009" . Organização Internacional para Padronização.
  16. ^ "ISO / IEC TR 24731-2: 2010" . Organização Internacional para Padronização.
  17. ^ "ISO / IEC TS 17961: 2013" . Organização Internacional para Padronização.
  18. ^ "ISO / IEC 18661-1 TS: 2014" . Organização Internacional para Padronização.
  19. ^ "ISO / IEC 18661-2 TS: 2015" . Organização Internacional para Padronização.
  20. ^ "ISO / IEC 18661-3 TS: 2015" . Organização Internacional para Padronização.
  21. ^ "ISO / IEC 18661-4 TS: 2015" . Organização Internacional para Padronização.
  22. ^ Veja uma lista de http://en.cppreference.com/w/c/experimental Visitou em 16 janeiro de 2016.
  23. ^ "Pacote da HP C / ANSI C desenvolvedor" . Retirado 2015/07/12 .
  24. ^ Suporte para ISO C11 adicionada ao compiladores IBM XL C / C ++
  25. ^ Link para páginas Pelles C

links externos