Tudo antes da padronização é geralmente chamado de "K&R C", em homenagem ao famoso livro , com Dennis Ritchie, o inventor da linguagem C, como um dos autores. Essa foi a "linguagem C" de 1972-1989.
O primeiro padrão C foi lançado em 1989 nacionalmente nos EUA, pelo seu instituto nacional de padrões ANSI. Esta versão é chamada de C89 ou ANSI-C. De 1989-1990, essa foi a "linguagem C".
No ano seguinte, o padrão americano foi aceito internacionalmente e publicado pela ISO (ISO 9899: 1990). Esta versão é chamada C90. Tecnicamente, é o mesmo padrão do C89 / ANSI-C. Formalmente, ele substituiu o C89 / ANSI-C, tornando-os obsoletos. De 1990 a 1999, C90 foi "a linguagem C".
Observe que, desde 1989, ANSI não tem nada a ver com a linguagem C. Os programadores que ainda falam sobre "ANSI C" geralmente não têm idéia do que significa. A ISO "possui" a linguagem C, através do padrão ISO 9899.
Uma pequena atualização foi lançada em 1995, às vezes chamada de "C95". Esta não foi uma revisão importante, mas sim uma emenda técnica formalmente denominada ISO / IEC 9899: 1990 / Amd.1: 1995. A principal mudança foi a introdução de um amplo suporte para personagens.
Em 1999, o padrão C passou por uma grande revisão (ISO 9899: 1999). Esta versão do padrão é chamada C99. De 1999 a 2011, essa foi a "linguagem C".
Em 2011, o padrão C foi alterado novamente (ISO 9899: 2011). Esta versão é chamada C11. Vários novos recursos _Generic
, como _Static_assert
suporte e thread foram adicionados à linguagem. A atualização teve muito foco em multi-core, multi-processamento e sequenciamento de expressão. De 2011-2017, essa foi a "linguagem C".
Em 2017, o C11 foi revisado e diversos relatórios de defeitos foram resolvidos. Este padrão é informalmente chamado de C17 e foi lançado como ISO 9899: 2018. Não contém novos recursos, apenas correções. É a versão atual da linguagem C.
"C99 estrito" provavelmente se refere a uma configuração do compilador que força o compilador a seguir o padrão à risca. Há um termo implementação de conformidade no padrão C. Essencialmente, significa: "este compilador realmente implementa a linguagem C corretamente". Os programas que implementam a linguagem C corretamente são formalmente chamados de programas em conformidade estrita .
"GNU C" pode significar duas coisas. Ou o próprio compilador C que vem como parte da GNU Compiler Collection (GCC). Ou pode significar a configuração padrão não padrão que o compilador GCC C usa. Se você compilar com gcc program.c
, você não compilará de acordo com o padrão C, mas sim com uma configuração GNU não padrão, que pode ser referida como "GNU C". Por exemplo, todo o kernel do Linux é feito em GNU C não padrão e não em C.
Se você deseja compilar seus programas de acordo com o padrão C, você deve digitar gcc -std=c99 -pedantic-errors
. Substitua c99 por c11 se sua versão do GCC for compatível.