Qual é a diferença entre C, C99, ANSI C e GNU C?

Eu 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? É C89? Verifique os idiomas na parte inferior deste envio . Contém C e C99.

Eu encontrei na internet algo chamado GNU C. Existe um C diferente para sistemas linux / unix? Estes são compatíveis com os padrões C pelo ANSI? Eu também li em alguns lugares “C99 strict”. O que é isso?

Existem outros padrões diferentes de C em uso? Existe algo chamado C 4.3.2 ou é a versão do gcc em uso atual?

EDITAR:

Isso , isso , isso ajudou. Vou pesquisar mais e editar as coisas que ficaram sem resposta.

Eu não sou um novato de programação. Eu sei o que é a linguagem C. Eu sei que existem os diferentes padrões C da ANSI, como C89, C99 e C11.

  • Tudo antes da padronização é geralmente chamado de “K & R C”, após o famoso livro , com Dennis Ritchie, o inventor da linguagem C, como um dos autores. Esta foi “a linguagem C” de 1972-1989.

  • O primeiro padrão C foi lançado em 1989 nos EUA, pelo instituto de padrões nacionais ANSI. Esta versão é chamada C89 ou ANSI-C. De 1989 a 1990, essa era “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 que C89 / ANSI-C. Formalmente, substituiu C89 / ANSI-C, tornando-os obsoletos. De 1990 a 1999, o C90 era “a linguagem C”.

    Por favor, note que desde 1989, ANSI não teve nada a ver com a linguagem C. Os programadores que ainda falam sobre “ANSI C” geralmente não sabem o que isso significa. ISO “possui” a linguagem C, através da norma ISO 9899.

  • Em 1999, o padrão C foi revisado, muitas coisas mudaram (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 resources como _Generic , _Static_assert e suporte a threads foram adicionados ao idioma. A atualização teve muito foco no multi-core, multiprocessing e sequenciamento de expressão. De 2011 a 2017, essa foi “a linguagem C”.

  • Em 2017, o C11 foi revisado e vários relatórios de defeitos foram solucionados. Este padrão é informalmente chamado de C17 e foi lançado como ISO 9899: 2018. Não contém novos resources, apenas correções. É a versão atual da linguagem C.


“C99 strict” refere-se provavelmente a uma configuração do compilador forçando um compilador a seguir o padrão pela letra. Existe um termo em conformidade com a implementação no padrão C. Essencialmente significa: “este compilador na verdade implementa a linguagem C corretamente”. Programas que implementam corretamente a linguagem C são formalmente chamados de programas estritamente conformes .

“GNU C” pode significar duas coisas. O próprio compilador C vem como parte do GNU Compiler Collection (GCC). Ou pode significar a configuração padrão não padrão que o compilador C do GCC usa. Se você compilar com o gcc program.c então você não compila de acordo com o padrão C, mas sim com uma configuração GNU não padrão, que pode ser chamada de “GNU C”. Por exemplo, todo o kernel do Linux é feito em um GNU C não padrão, e não no padrão C.

Se você quiser compilar seus programas de acordo com o padrão C, você deve digitar gcc -std=c99 -pedantic-errors . Substitua c99 por c11 se a sua versão do GCC o suportar.

Eu devo responder sobre o ANSI C. Embora o ANSI não tenha feito nada com ele, os compiladores ainda são compilados 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 Kernighan e Ritchie em The C Programming Language (segunda edição). … “Nem toda programação é para computadores” grandes “como PCs. Escrevendo um compilador para os custos do seu dispositivo e validando os custos e o tempo. ANSI C está vivo e bem e vivendo em seus dispositivos embutidos / em tempo real.

  • ANSI C: A primeira linguagem C foi padronizada pelo organismo chamado ANSI em 1989 e é por isso que é chamada c89.

  • C99:
    com a demanda dos requisitos dos desenvolvedores, em 1999-2000, palavras-chave adicionais e adicionais foram incluídas no C99 (ex: inline, booleano .. Adicionadas funções de biblioteca artemática de ponto flutuante)

  • GNU C: GNU é um sistema operacional similar ao unix (www.gnu.org) e em algum lugar o projeto do GNU precisa de linguagem de programação C baseada no padrão ANSI C. O GNU usa o compilador GCC (GNU Compiler Collection) para compilar o código. Tem a function da biblioteca C que define as chamadas do sistema, como malloc, calloc, exit … etc

ANSI C é um padrão que está sendo usado ou referendado pelos outros padrões.

Além da resposta da Lundin

Aqui está o que Dennis Richie tem para dizer quando perguntado

“Por que a K & R não esperou pelo padrão ANSI final aprovado antes de escrever a segunda edição do K & R?”

Por que a K & R não esperava pelo padrão ANSI final aprovado antes de escrever a segunda edição do K & R? Parece que este livro só será o padrão correto por alguns meses antes de ser suplantado pelo padrão ANSI final. Sei que provavelmente haverá poucas mudanças importantes neste estágio final, mas por que não esperar alguns meses e ter certeza de que está 100% correto, em vez de precisar escrever quase imediatamente uma terceira edição ou ficar obsoleto?

Achamos que seria bom marcar o 10º aniversário da primeira edição. Mais a sério, começamos a trabalhar no verão passado porque tivemos tempo e inclinação e parecia que o X3J11 estava chegando ao fim. Em dezembro e janeiro, quando estávamos terminando, consideramos se a possibilidade de mudanças importantes justificava o adiamento da entrega e (depois de discutir o assunto com o editor) decidiu que não valia a pena esperar. PH queria, e Brian e eu queríamos que isso saísse de nossas agendas.

Mesmo se houver mudanças no padrão, é difícil imaginar que elas seriam extensas o suficiente para garantir uma nova edição. (Estávamos até mesmo preparados para lidar de alguma forma com a noalias, se isso tivesse durado.) Estamos prontos para fazer as mudanças necessárias em uma impressão futura, mas há motivos para esperar que sejam pequenas. Os membros do X3J11 estão muito ansiosos para terminar sem surpreender as pessoas também; muitos deles trabalham para empresas que estão preparando compiladores ANSI, afinal.

Dennis Ritchie

Esta questão não foi completamente pesquisada na net para responder, de qualquer forma você pode olhar para isto:

  1. C é uma linguagem de programação de uso geral desenvolvida inicialmente por Dennis Ritchie entre 1969 e 1973 na AT & T Bell Labs.
  2. C99 é um padrão da linguagem C publicado pela ISO e adotado pela ANSI por volta de 1999.
  3. O GNU C é apenas uma extensão do c89, enquanto alguns resources do c99 também são adicionados, mas na sua totalidade é diferente do padrão c99, portanto, ao compilar no gcc, temos que digitar -std=c99 que já foi mencionado nas outras respostas.
  4. ANSI C é uma série sucessiva de padrões lançados pelo ANSI.