ANSI C

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar
Normas para a linguagem de programação 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 ISO/IEC JTC 1/SC 22/WG 14 da Organização Internacional de Normalização (ISO) e da Comissão Eletrotécnica Internacional (IEC). Historicamente, os nomes se referiam especificamente à versão original e com melhor suporte do padrão (conhecida como C89 ou C90). Os desenvolvedores de software que escrevem em C são incentivados a se adequar aos padrões, pois isso ajuda na portabilidade entre os compiladores.

História e perspectivas

O primeiro padrão para C foi publicado pela ANSI. Embora este documento tenha sido adotado posteriormente pela ISO/IEC e as revisões subsequentes publicadas pela ISO/IEC 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 em relação aos padrões 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 Rascunho de Padrão foi lançado, às vezes referido como C85. Em 1986, outro Projeto de Norma foi lançado, às vezes referido como C86. O padrão C de pré-lançamento 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." Essa versão da linguagem costuma ser 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 C89 foi ratificado pela ISO/IEC como ISO/IEC 9899:1990, apenas com alterações de formatação, que às vezes é referido como C90. Portanto, os termos "C89" e "C90" referem-se essencialmente à mesma linguagem.

Esta norma foi retirada tanto pela ANSI/INCITS quanto pela ISO/IEC.

C95

Em 1995, a ISO/IEC publicou uma extensão, denominada 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 idioma, como:

  • Melhorado multi-byte e caráter amplo suporte na biblioteca padrão, introdução e assim como multi-byte I/O
  • Adição de digramas para a língua
  • 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 emenda, duas correçõ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 definition(_STDC_VERSION_____ && __STDC_VERSION__ >= 199409L/* C95 código fonte compatível. *#elif definido(_STDC___)/* C89 código fonte compatível. *#endif

C99

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

  • Novos tipos de dados incorporados: long long, _Bool, _Complexe _Imaginary
  • Vários novos recursos linguísticos, incluindo índices de matriz estática, inicializadores designados, literais compostos, arrays de comprimento variável, membros de array flexíveis, macros variáveis e restrict palavra-chave
  • Vários novos cabeçalhos da biblioteca, incluindo stdint.h, , fenv.h,
  • Melhor compatibilidade com vários recursos C++, incluindo funções inline, comentários de linha única com //, misturando declarações e códigos, e nomes de caracteres universais em identificadores
  • Removido várias características perigosas da linguagem C89, tais como declarações de função implícita e implícita int

Três correçõ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 para deprecair a função padrão da biblioteca recebe

Esta norma foi retirada pela ANSI/INCITS e pela ISO/IEC em favor da C11.

C11

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

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

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

C17

Desde outubro de 2018, "C17" é o padrão atual 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 (após C17) principal revisão padrão da linguagem C.

Outras publicações ISO relacionadas

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

  • ISO/IEC TR 19769:2004, em extensões de biblioteca para apoiar formatos de transformação Unicode, integrados em C11
  • ISO/IEC TR 24731-1:2007, em extensões de biblioteca para suportar interfaces de verificação de limites, integradas 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 apoiar funções de alocação dinâmica
  • ISO/IEC TS 17961:2013, sobre codificação segura em C
  • ISO/IEC TS 18661-1:2014, no IEC 60559:2011-compatível com aritmética de ponto flutuante binário
  • ISO/IEC TS 18661-2:2015, no IEC 60559:2011-compatível com aritmética de ponto flutuante decimal
  • ISO/IEC TS 18661-3:2015, no IEC 60559:2011-compatível intercambiar e estender tipos de ponto flutuante
  • ISO/IEC TS 18661-4:2015, no IEC 60559:2011 funções complementares 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 dois dos principais compiladores C populares hoje, ambos são baseados no C11 com atualizações, incluindo alterações de especificações posteriores, como C17 e C18. Qualquer código-fonte escrito somente no padrão C e sem quaisquer suposições dependentes de hardware é virtualmente garantido para compilar corretamente em qualquer plataforma com uma implementação C em conformidade. Sem essas precauções, a maioria dos programas pode compilar apenas em uma determinada plataforma ou com um compilador específico, 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 byte endianness.

Detecção de conformidade

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

 #if definition(_STDC_____) && __STDC___ externidade - Não. O quê?(- Não., Charlie. * Não. *, Não. Charlie. *); #else externidade - Não. O quê?(); #endif

No exemplo acima, um protótipo é usado em uma declaração de função para implementações compatíveis com ANSI, enquanto uma declaração não-protótipo obsoleta é usada caso contrário. Esses ainda são compatíveis com ANSI a partir de C99. Observe como esse código verifica a definição e a avaliação: isso ocorre porque algumas implementações podem definir __STDC__ como zero para indicar conformidade não ANSI.

Suporte do compilador

Lista de compiladores que suportam ANSI C:

  • Amsterdam Compiler Kit (C K&R e C89/90)
  • ARM RealView
  • Clang, usando backend LLVM
  • GCC (plenagem C89/90, C99 e C11)
  • Compilador 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

Contenido relacionado

DEC Alfa

Alpha é uma arquitetura de conjunto de instruções de computador com conjunto de instruções reduzido de 64 bits desenvolvida pela Digital Equipment...

Ethernet

Ethernet é uma família de tecnologias de redes de computadores com fio comumente usadas em redes de área local redes de área metropolitana e redes de...

Problema de decisão

Na teoria da computabilidade e na teoria da complexidade computacional, um problema de decisão é um problema computacional que pode ser colocado como uma...
Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save