Comecei a prática de programação no codechef e fiquei confuso com a diferença entre C e C99. O que C significa aqui? É o C89? Verifique os idiomas na parte inferior deste envio . Ele contém C e C99.
Encontrei na Internet algo chamado GNU C. Existe um C diferente para sistemas Linux / Unix? Eles estão em conformidade com os padrões C da ANSI? Também li em alguns lugares "C99 estrito". O que é isso?
Existem outros padrões diferentes de C em uso? Existe algo chamado C 4.3.2 ou é a versão gcc em uso atualmente?
EDITAR:
Isso , isso , isso ajudou. Vou pesquisar mais e editar as coisas que ficaram sem resposta.
Eu não sou um novato em programação. Eu sei o que é a linguagem C. Eu sei que existem diferentes padrões C por ANSI como C89, C99 e C11.
Respostas:
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.fonte
Preciso responder sobre ANSI C. Embora ANSI não tenha feito nada com ele, os compiladores ainda são construídos para ele. Compilador PIC XC16, por exemplo: "O compilador é um compilador totalmente validado que está em conformidade com o padrão ANSI C conforme definido pela especificação ANSI (ANSI x3.159-1989) e descrito em The C Programming Language de Kernighan e Ritchie (segunda edição). ... "Nem toda a programação é para" grandes "computadores como os PCs. Escrever um compilador para os custos do seu dispositivo e validar custa tempo e $. ANSI C está vivo e bem e vivendo em seus dispositivos incorporados / em tempo real.
fonte
ANSI C: A primeira linguagem C foi padronizada pelo órgão chamado ANSI em 1989, por isso é chamada de c89.
C99:
com a demanda dos requisitos dos desenvolvedores, em 1999-2000 palavras-chave e recursos adicionais ou adicionais foram incluídos no C99 (ex: inline, booleano .. Adicionadas funções de biblioteca artemática de ponto flutuante)
GNU C: GNU é um sistema operacional semelhante ao Unix (www.gnu.org) e em algum lugar o projeto GNU precisa da linguagem de programação C baseada no padrão ANSI C. GNU usa o compilador GCC (GNU Compiler Collection) para compilar o código. Possui função de biblioteca C que define chamadas de sistema como malloc, calloc, exit ... etc
ANSI C é um padrão que está sendo usado ou referenciado por outros padrões.
fonte
Além da resposta de Lundin
Aqui está o que Dennis Richie tem a dizer quando questionado
"Por que a K&R não esperou pelo padrão ANSI aprovado final antes de escrever a 2ª edição da K&R?"
fonte
int i; int test(double *p) { i=1; *p=2.0; return i; }
um compilador, não deveria ser recarregadoi
após a gravação*p
em, pois havia a chance dep
conter o endereço dei
. Perfeitamente razoável. O problema é que os compiladores modernos usam a mesma regra para justificar suposições de que a gravação em along*
não afetará along long
, mesmo se ambos os tipos tiverem o mesmo tamanho e representação , e mesmo se duas estruturas compartilharem uma sequência inicial comum, o código nunca usará um ponteiro de um tipo para ler um membro CIS escrito por meio do outro.Esta pergunta não foi completamente pesquisada na rede para obter uma resposta, de qualquer forma, você pode olhar para isto:
-std=c99
que já foi mencionado nas outras respostas.fonte
gcc
suporta-std=c89
e-std=gnu89
e-std=c99
e-std=gnu99
(e versões suficientemente modernas suportam-std=c11
e-std=gnu11
). A diferença está no fato de as extensões sobre o C padrão estarem disponíveis automaticamente ou apenas quando a fonte incita o compilador a fornecer macros apropriadas (como-D_XOPEN_SOURCE=700
).