C est en open source?
C'est probablement une question stupide, mais je me demandais à ce sujet pendant un certain temps. Est-ce que C (ou tout autre langage de bas niveau, d'ailleurs) ont une source, ou est le compilateur de la partie qui "fait le travail", y compris l'analyse? Si oui, ne pouvait pas différents compilateurs ont différents C dialectes? D'où vient le stdlib facteur dans tout cela? Je voudrais vraiment savoir comment cela fonctionne.
Vous devez vous connecter pour publier un commentaire.
Le langage C n'est pas un logiciel mais un norme définie, de sorte que l'un ne dirais pas que c'est open-source, mais plutôt que c'est un standard ouvert.
Il y a une foule de différents compilateurs de C cependant, et beaucoup de ceux qui sont en effet open-source. L'exemple le plus notable est GCC est le compilateur C, qui est sous la Licence Publique Générale de GNU (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 l'open-source les compilateurs C, mais sans doute le plus répandu, au moins dans le non-monde Windows, est GCC.
Pour Windows, votre meilleur pari est probablement Watcom ou GCC en utilisant Cygwin ou MinGW.
C est une norme qui spécifie comment les compilateurs C devrait générer des programmes.
C elle-même n'a pas le code source, tout comme une note de musique n'ont pas de plastique.
Certains compilateurs C, comme GCC, sont open source.
C est juste une langue et un format standardisé qui plus est, trop. Il est le compilateur qui fait tout le travail". Différents compilateurs n'ont différents dialectes; avant que le C99 à la norme ANSI, vous aviez des choses comme Borland C et autres compilateurs, qui ont mis en œuvre le langage C dans leurs propres moyens fantastiques.
stdlib
est juste un convenues de la collection de bibliothèques standard qui sont nécessaires pour être présent dans toutes les C ANSI mise en œuvre.À ajouter sur les autres réponses:
Concernant les différents dialectes -- il y a quelques fonctionnalités supplémentaires ajoutées à C qui sont spécifiques de compilateur. Vous pouvez fournir l'option de ligne de commande
-std=...
à gcc pour spécifier le C standard que vous souhaitez utiliser, chacun a de légères variantes/ajouts à la syntaxe, la plus commune est sans doutec99
.Chaque compilateur tend à mettre en œuvre quelques extras, par exemple,
typeof()
n'est pas dans la norme et donc les compilateurs n'ont pas à mettre en œuvre mais il est néanmoins utile et la plupart des compilateurs fournir. Voici une liste de gcc C extensionsLa stdlib est un ensemble de fonctions spécifiées dans la norme. Un peu comme les compilateurs, les stdlib peut avoir différentes implémentations. L'implémentation GNU est open source, comme c'est gcc, mais il y a d'autres compilateurs et peut être d'autres implémentations de stdlib qui sont à code source fermé.
Le Compilateur de déterminer tous les mappages de C à l'Assemblage, etc... mais aussi loin que quelqu'un se l'approprier.....personne ne possède vraiment C cependant la norme ANSI/ISO détermine les normes
GCC le compilateur C est écrit en C. Donc, nous savons qu'il existe au moins un C compilateur écrit en C.
GNU
stdlib
(glibc) est également écrit en C (stdio.h, stdlib.h). Mais il a aussi quelques pièces écrites en langage d'assemblage.Vraiment une bonne question. Il y a un moyen pour définir une langue standard (pas la mise en œuvre!) dans une forme de "source code", dans le cadre strict et unambigous langue. Malheureusement, toutes les anciennes langues, y compris C, sont mal définis. Mais il est toujours possible de traduire le fait que les définitions dans une forme de code source.
Une autre approche consiste à définir une langue par l'intermédiaire de son sémantique opérationnelle, souvent sous la forme d'un simple (et unefficient) l'implémentation de référence.
Helgi Hrafn Gunnarsson a écrit la principale réponse mais j'ai pensé qu'il serait intéressant de noter que vous pouvez retrouver avec les dialectes trop.
Les compilateurs doivent faire la même chose en ce qui concerne quelle que soit la norme qu'ils supportent (qui ces jours-ci devrait être à peu près tous la même version), mais il existe des zones grises. La façon dont les compilateurs de travail pour 'undefined' de la fonctionnalité par exemple. Si le C spécification indique que le comportement n'est pas défini pour un cas spécifique, alors le compilateur peut faire à peu près ce qu'il veut.
Il y a aussi des exemples de fonctions dans les bibliothèques (et de nouvelles bibliothèques ajoutée) par le compilateur décideurs pour soutenir la plate-forme de traits, de créer un avantage concurrentiel ou tout simplement pour rendre la vie plus facile. Les cyniques pourraient suggérer que certains de ceux-ci sont ajoutés pour aider les gens de verrouillage dans un compilateur spécifique trop.
Je dirais que C est comme une langue n'est pas open source.
Comme l'ont souligné de nombreux, vous pouvez le télécharger sous licence GNU compilateurs et bibliothèques gratuitement, mais si vous souhaitez écrire votre propre compilateur C, vous devez suivre les normes ISO C, et de l'ISO chargé de l'argent dur pour la spécification du langage C, qui, au moment de l'affichage de cette est de $178.
Alors, vraiment, la réponse dépend de quels éléments vous êtes intéressé à être libre et de l'open source.