ANSI C - ANSI C
Revisões de linguagem 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,
and
para&&
- 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:
- New built-in tipos de dados :
long long
,_Bool
,_Complex
, e_Imaginary
- Vários novos recursos de linguagem de núcleo, incluindo índices de matriz estática, inicializadores designados, literais compostos, matrizes de comprimento variável , membros de matriz flexível , macros variadic e
restrict
palavra - chave - Vários novos cabeçalhos de biblioteca, incluindo
stdint.h
,<tgmath.h>
,fenv.h
,<complex.h>
- Compatibilidade aprimorada com vários recursos C ++ , incluindo funções embutidas , comentários de uma linha com
//
, declarações e código combinados e nomes de caracteres universais em identificadores - Removidos vários recursos perigosos da linguagem C89, como declarações de funções implícitas e
int
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 _Generic
palavra-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 ) .
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
- Amsterdam Compiler Kit (C K&R e C89 / 90)
- ARM RealView
- Clang , usando backend LLVM
- GCC (C89 / 90, C99 e C11 completo)
- Compilador HP C / ANSI C (C89 e C99)
- IBM XL C / C ++ (C11, começando com a versão 12.1)
- ICC da Intel
- LabWindows / CVI
- LCC
- OpenWatcom (C89 / 90 e alguns C99)
- Microsoft Visual C ++ (C89 / 90 e alguns C99)
- Pelles C (C99 e C11. Apenas Windows.)
- vbcc (C89 / 90 e C99)
- Compilador Tiny C (C89 / 90 e alguns C99)
- Oracle Developer Studio
Veja também
- Linguagem de descrição comportamental
- Compatibilidade de C e C ++
- C ++ 17 , C ++ 14 , C ++ 11 , C ++ 03 , C ++ 98 , versões do padrão de linguagem de programação C ++
- Relatório Técnico C ++ 1
Referências
- ^ Brad Kelechava (2016/09/14). "A origem de ANSI C e ISO C" . Página visitada em 14/08/2018 .
- ^ Richard Hale Shaw (setembro de 1988). "Padrão C: O rascunho ANSI cresce". Revista PC . Vol. 7 não. 15. pp. 116-117.
- ^ "Padrões - Usando a GNU Compiler Collection (GCC)" . Página visitada em 2012-06-24 .
- ^ "INCITS / ISO / IEC 9899" . www.techstreet.com . Página visitada em 03/10/2018 .
- ^ "ISO / IEC 9899: 1990 - Linguagens de programação - C" . Página visitada em 2012-06-24 .
- ^ Clive DW Feather (12/09/2010). "Uma breve descrição do Adendo Normativo 1" .
- ^ "ISO / IEC 9899: 1990 / Amd 1: 1995" . Organização Internacional para Padronização. 22/03/2013.
- ^ "ISO / IEC 9899: 1990 / Cor 1: 1994" . ISO . Obtido em 21/01/2019 .
- ^ "ISO / IEC 9899: 1990 / Cor 2: 1996" . ISO . Obtido em 21/01/2019 .
- ^ 14: 00-17: 00. "ISO / IEC 9899: 1999" . ISO . Obtido em 21/01/2019 .CS1 maint: nomes numéricos: lista de autores ( link )
- ^ "INCITS / ISO / IEC 9899-2012" . ANSI.
- ^ "ISO / IEC 9899: 1999 - Linguagens de programação - C" . Página visitada em 2012-06-24 .
- ^ "ISO / IEC 9899: 2011 / Cor 1: 2012" . Organização Internacional para Padronização.
- ^ "ISO / IEC 9899: 2018 - Tecnologia da informação - Linguagens de programação - C" . www.iso.org .
- ^ "O padrão - C" . www.iso-9899.info .
- ^ "História de C" . cppreference .
- ^ "ISO / IEC TR 19769: 2004" . Organização Internacional para Padronização.
- ^ "ISO / IEC TR 24731-1: 2007" . Organização Internacional para Padronização.
- ^ "ISO / IEC TR 18037: 2008" . Organização Internacional para Padronização.
- ^ "ISO / IEC TR 24732: 2009" . Organização Internacional para Padronização.
- ^ "ISO / IEC TR 24747: 2009" . Organização Internacional para Padronização.
- ^ "ISO / IEC TR 24731-2: 2010" . Organização Internacional para Padronização.
- ^ "ISO / IEC TS 17961: 2013" . Organização Internacional para Padronização.
- ^ "ISO / IEC TS 18661-1: 2014" . Organização Internacional para Padronização.
- ^ "ISO / IEC TS 18661-2: 2015" . Organização Internacional para Padronização.
- ^ "ISO / IEC TS 18661-3: 2015" . Organização Internacional para Padronização.
- ^ "ISO / IEC TS 18661-4: 2015" . Organização Internacional para Padronização.
- ^ Veja uma lista em https://en.cppreference.com/w/c/experimental Visitado em 16 de janeiro de 2016.
- ^ "Usando a Coleção de Compiladores GNU (GCC): Padrões" . gcc.gnu.org . Recuperado em 05/02/2019 .
- ^ "Compatibilidade de idioma" . clang.llvm.org . Recuperado em 05/02/2019 .
- ^ "Nomes de macro predefinidos padrão" . www.ibm.com . Recuperado em 10/04/2019 .
- ^ "Pacote do desenvolvedor HP C / ANSI C" . Página visitada em 12/07/2015 .
- ^ Suporte para ISO C11 adicionado aos compiladores IBM XL C / C ++
- ^ 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
- Grupo de trabalho ISO C
- Rascunho do padrão ANSI C (ANSI X3J11 / 88-090) (13 de maio de 1988), terceira revisão pública
- Rascunho da justificativa ANSI C (ANSI X3J11 / 88-151) (18 de novembro de 1988)
- Boletim de informações C # 1 (ANSI X3J11 / 93-007) (27 de maio de 1992)
- Gramática ANSI C Yacc
- "ISO / IEC 9899: 1999 Linguagens de programação - C" . American National Standards Institute. Arquivado do original em 25/07/2011 . Página visitada em 06-08-2009 .
- "ANSI Standards Action Vol. 36, # 48" (PDF) . American National Standards Institute. 02-12-2005. Arquivado do original (PDF) em 04/03/2016 . Página visitada em 06-08-2009 .