web-dev-qa-db-fra.com

Est-ce que c Open Source?

C'est probablement une question stupide, mais je me suis demandé à ce sujet depuis un moment. Est-ce que C (ou tout autre langage de bas niveau, à cette affaire) a même une source ou est le compilateur la partie qui "fait tout le travail", y compris une analyse? Si tel est le cas, différents compilateurs n'ont-ils pas différentes dialectes C? D'où vient le facteur STDLIB? J'aimerais vraiment savoir comment cela fonctionne.

73
Hypercube

Le langage C n'est pas un élément de logiciel mais a standard défini , donc on ne dirait pas que c'est une source ouverte, mais que c'est une norme ouverte.

Il y a un gazillion différents compilateurs pour C Cependant, et beaucoup d'entre eux sont en effet open-source. L'exemple le plus notable est Compilateur C de GCC , qui est tout sous la licence GNU General Public License (GPL) , une licence open-source.

Il y a plus d'options. watcom est open-source, par exemple. Il n'y a pas de pénurie de compilateurs C Open-Source C, mais sans aucun doute, le plus répandu, au moins dans le monde des non-Windows, est CGC.

Pour Windows, votre meilleur pari est probablement WATCOM ou GCC en utilisant Cygwin ou MINGW .

127
Teekin

C est une norme qui spécifie comment les compilateurs C devraient générer des programmes.
[.____] c "c même n'a aucun code source, comme une note musicale n'a pas de plastique.

Certains compilateurs C, tels que GCC, sont open source.

27
SLaks

C est juste une langue, et une normalisée à cela aussi. C'est à peu près le compilateur qui "fait tout le travail". Différents compilateurs ont eu des dialectes différents; Avant la norme C99 ANSI, vous avez eu des choses comme Borland C et d'autres compilateurs concurrents, qui ont mis en œuvre le langage C de manière fantastique.

stdlib est juste une collecte convenue de bibliothèques standard qui doivent être présentes dans toute mise en œuvre de l'ANSI C.

10
nesv

Pour ajouter aux autres grandes réponses:

En ce qui concerne les dialectes différents - certaines fonctionnalités supplémentaires sont ajoutées à C qui sont spécifiques au compilateur. Vous pouvez fournir l'indicateur de ligne de commande -std=... À GCC pour spécifier la norme C que vous souhaitez utiliser, chacune dispose de légères variations/ajouts à la syntaxe, le plus courant est probablement c99.

Chaque compilateur a tendance à mettre en œuvre quelques extras différents, par exemple, typeof() n'est pas dans la norme C et les compilateurs ne doivent donc pas nécessairement mettre en œuvre cela, mais il est néanmoins utile et la plupart des compilateurs le fournissent. Voici ne liste des extensions CCC C

Le STDLIB est un ensemble de fonctions spécifiées dans la norme C. Tout comme les compilateurs, STDLIB peut avoir des implémentations différentes. Le GNU La mise en œuvre est open source, de même que GCC, mais il existe d'autres compilateurs et pourraient être d'autres implémentations de STDLIB qui sont fermées à la source.

4
Jesse Cohen

Le compilateur déterminerait toutes les mappages de C à l'assemblage, etc. mais aussi loin que quelqu'un qui possède ..... personne ne possède vraiment C mais l'ANSI/ISO détermine les normes

3
user475353

Helgi Hrafn Gunnarsson a écrit la réponse principale, mais je pensais qu'il serait à noter que vous pouvez également vous retrouver avec des dialectes.

Les compilateurs devraient faire la même chose en ce qui concerne la norme qu'ils soutiennent (ce que ces jours devraient être à peu près toutes la même version), mais il y a des zones grises. La manière dont les compilateurs fonctionnent pour des fonctionnalités "indéfinies" par exemple. Si la spécification C indique que le comportement est indéfini pour un cas spécifique, le compilateur peut faire à peu près ce qu'il veut.

Il existe également des exemples de fonctions ajoutées aux bibliothèques (et de nouvelles bibliothèques ajoutées) par les fabricants de compilateurs afin de prendre en charge des traits de plate-forme spécifiques, de créer un avantage concurrentiel ou simplement de faciliter la vie. Le cynique peut suggérer que certains d'entre eux sont ajoutés pour aider à verrouiller les gens dans un compilateur spécifique aussi.

1
Colin Newell

Une très bonne question. Il existe un moyen de définir une norme de langue (pas la mise en œuvre!) Dans une forme de "code source", dans une langue stricte et sans ambiguë. Malheureusement, toutes les langues anciennes, y compris c, sont mal définies. Mais il est toujours possible de traduire ces définitions sur un formulaire de code source.

Une autre approche consiste à définir une langue via sa sémantique opérationnelle , souvent sous une forme d'implémentation de référence simple (et nonefficace).

1
SK-logic

Je dirais que c comme une langue n'est pas open source. Comme indiqué par beaucoup, vous pouvez télécharger GNU compilateurs agréés et bibliothèques gratuits, mais si vous souhaitiez écrire votre propre compilateur C, vous devez suivre les normes ISO C et la charge ISO En espèces difficiles pour la spécification du langage C, qui au moment de l'affichage est de 178 $. Donc, vraiment la réponse dépend de quels éléments vous souhaitez être libre et open source.

0
user2827968