O C é código aberto?

Esta é provavelmente uma pergunta estúpida, mas tenho andado a pensar nisto há algum tempo. Será Que C (ou qualquer outra linguagem de baixo nível, já agora) tem mesmo fonte, ou é o compilador a parte que" faz todo o trabalho", incluindo o processamento? Se SIM, diferentes compiladores não poderiam ter diferentes dialetos C? Onde está o factor stdlib nisto? Gostaria muito de saber como é que isto funciona.

Author: casperOne, 2011-02-24

9 answers

A linguagem C não é um software, mas um padrão definido, então não se diria que é de código aberto, mas sim que é um padrão aberto.

No entanto, existem milhões de compiladores diferentes para C, e muitos deles são de facto de código aberto. O exemplo mais notável é o compilador C do GCC , que está tudo sob a GNU General Public License (GPL), uma licença de código aberto. Há mais opções. a Watcom é de código aberto, por exemplo. Não há escassez de compiladores C de código aberto, mas sem dúvida o mais difundido, pelo menos no mundo Não-Windows, é o GCC.

Para o Windows, a sua melhor aposta é, provavelmente, Watcom ou GCC usando Cygwin ou MinGW.

 122
Author: Teekin, 2011-02-24 13:21:54

C é um padrão que especifica como os compiladores C devem gerar programas.
O próprio C não tem código fonte, tal como uma nota musical não tem Plástico.

Alguns compiladores C, como o GCC, são de código aberto.

 26
Author: SLaks, 2011-02-24 01:29:57

C é apenas uma linguagem, e também uma linguagem normalizada. É basicamente o compilador que"faz todo o trabalho". Diferentes compiladores tinham dialetos diferentes; antes do padrão C99 ANSI, você tinha coisas como Borland C e outros compiladores concorrentes, que implementaram a linguagem C de suas próprias maneiras fantásticas.

stdlib é apenas uma coleção acordada de bibliotecas padrão que são necessárias para estar presente em qualquer implementação ANSI C.

 10
Author: nesv, 2011-02-24 01:31:59

Para adicionar às outras grandes respostas:

Em relação aos diferentes dialetos -- há algumas características adicionais adicionadas a C que são específicas do compilador. Você poderá indicar a opção da linha de comandos -std=... para o gcc para indicar o padrão de C que deseja usar, cada um tem Pequenas variações/adições à sintaxe, sendo o mais comum provavelmente c99.

Cada compilador tende a implementar alguns extras diferentes, por exemplo, typeof() não está na norma C e por isso os compiladores não têm de implementá-lo, mas, no entanto, é útil e a maioria dos compiladores fornecê-lo. Aqui está uma lista de extensões gcc C

O stdlib é um conjunto de funções especificadas na norma C. Assim como compiladores, o stdlib pode ter implementações diferentes. A implementação GNU é open source, como é gcc, mas existem outros compiladores e podem ser outras implementações de stdlib que são código fechado.

 4
Author: Jesse Cohen, 2011-02-24 01:56:58

O compilador determinaria todos os mapeamentos de C para montagem, etc... mas no que diz respeito a alguém que a possui.....Noone really owns C however the ANSI / ISO determines the standards

 3
Author: , 2011-02-24 01:31:02

O compilador C do GCC está escrito em C. por isso sabemos que há pelo menos um C escrito em C.

O GNU stdlib (glibc) também está escrito em C (stdio.h, stdlib.h). Mas também tem algumas partes escritas em linguagem de montagem.

 2
Author: Pablo Santa Cruz, 2011-02-24 01:28:42
Uma boa pergunta. existe uma maneira de definir um padrão de linguagem (não a implementação!) em uma forma de" código fonte", em uma linguagem estrita e sem ambiguidades. Infelizmente, todas as línguas antigas, incluindo C, estão mal definidas. Mas ainda é possível traduzir essas definições em um formulário de código fonte. Uma outra abordagem consiste em definir uma língua através da sua [[6]] semântica operacional, muitas vezes sob a forma de uma referência simples (e pouco eficiente). implementacao.
 1
Author: SK-logic, 2011-02-24 11:34:01
Helgi Hrafn Gunnarsson escreveu a resposta Principal, mas achei que valeria a pena notar que você pode efetivamente acabar com dialetos também.

Os compiladores devem fazer a mesma coisa em relação ao padrão que suportam (que hoje em dia deve ser praticamente toda a mesma versão), mas há áreas cinzentas. A forma como os compiladores trabalham para a funcionalidade "indefinida", por exemplo. Se a especificação C disser que o comportamento não é definido para um determinado caso em que o compilador pode fazer o que quiser.

Existem também exemplos de funções adicionadas às bibliotecas (e novas bibliotecas adicionadas) pelos compiladores para suportar traços específicos de plataforma, criar uma vantagem competitiva ou simplesmente para tornar a vida mais fácil. O cínico pode sugerir que alguns destes são adicionados para ajudar a prender as pessoas em um compilador específico também.

 1
Author: Colin Newell, 2011-02-24 12:21:36

Eu diria que C como língua não é código aberto. Como apontado por muitos, você pode baixar Compiladores e bibliotecas licenciadas GNU gratuitamente, mas se você quisesse escrever seu próprio compilador C, você precisaria seguir as normas ISO C, e ISO cobrar dinheiro duro para a especificação da linguagem C, que no momento da publicação este é $178. Então realmente a resposta depende de quais elementos você está interessado em ser livre e de código aberto.

 0
Author: Curg, 2017-04-07 06:40:31