Quelle est la différence entre C, C99, ANSI C et GNU C?

j'ai commencé à programmer la pratique sur codechef et ont été confondus par la différence entre C et C99. Qu'est-ce que C? Est-il C89? vérifiez les langues au bas de ce soumettre . Il contient à la fois C et C99.

j'ai trouvé sur internet quelque chose appelé GNU C. y a-t-il un C différent pour les systèmes linux/unix? Sont-ils conformes aux normes C de L'ANSI? J'ai aussi lire à certains endroits "C99 strict". Qu'est-ce que cela?

y a-t-il d'autres normes différentes de C en usage? Y a-t-il quelque chose appelé C 4.3.2 ou est-ce la version gcc utilisée actuellement?

EDIT:

Ce , Ce , Ce aidé. Je vais chercher plus et éditer les choses qui restent sans réponse.

Je ne suis pas un programmation débutant. Je sais ce que C est langue. Je sais qu'il y a les différentes normes C par ANSI comme C89, C99 et C11.

95
demandé sur Community 2013-06-20 10:21:00

5 réponses

  • tout avant la normalisation est généralement appelé "K&R C", après le célèbre livre , avec Dennis Ritchie, l'inventeur de la langue C, comme l'un des auteurs. Il s'agit de la "langue C" de 1972 à 1989.

  • la première norme C a été publiée en 1989 à l'échelle nationale aux États-Unis, par leur National standard institute ANSI. Cette version est appelée C89 ou ANSI-C. langue."

  • l'année suivante, la norme américaine a été acceptée au niveau international et publiée par L'ISO (ISO 9899:1990). Cette version s'appelle C90. Techniquement, c'est la même norme que C89/ANSI-C. formellement, elle a remplacé C89/ANSI-C, les rendant obsolètes. De 1990 à 1999, C90 était "la langue C".

    veuillez noter que depuis 1989, L'ANSI n'a plus rien à voir avec le langage C. Les programmeurs parlent encore d'ANSI C" généralement n'ai pas la moindre idée de ce que cela signifie. L'ISO "possède" le langage C, par le biais de la norme ISO 9899.

  • en 1999, la norme C a été révisée, beaucoup de choses ont changé (ISO 9899:1999). Cette version de la norme s'appelle C99. De 1999 à 2011, il s'agissait du "langage C".

  • en 2011, la norme C A de nouveau été modifiée (ISO 9899:2011). Cette version s'appelle C11. Diverses nouvelles fonctionnalités comme _Generic , _Static_assert et le support de thread ont été ajoutés au langage. La mise à jour mettait l'accent sur le multi-core, le multi-processing et le séquençage des expressions. De 2011 à 2017, c'était "la langue C".

  • en 2017, C11 a été révisé et divers rapports de défauts ont été résolus. Cette norme, appelée officieusement C17, a été publiée en tant que norme ISO 9899:2018. Il ne contient pas de nouvelles fonctionnalités, juste des corrections. C'est la version actuelle du langage C.


"C99 strict" renvoie probablement à un paramètre de compilateur forçant un compilateur à suivre la norme par la lettre. Il existe un terme mise en œuvre conforme dans la norme C. Essentiellement cela signifie: "ce compilateur implémente effectivement le langage C correctement". Les programmes qui mettent en œuvre le langage C correctement sont officiellement appelés programmes strictement conformes .

"GNU C" peut signifier deux choses. Soit le compilateur C lui-même qui fait partie de la collection de compilateurs GNU (GCC). Ou cela peut signifier la configuration par défaut non standard que le compilateur GCC c utilise. Si vous compilez avec gcc program.c , alors vous ne compilez pas selon le standard C, mais plutôt une configuration GNU non standard, qui peut être appelée "GNU C". Par exemple, tout le noyau Linux est fait en GNU C non standard, et non en C standard.

si vous voulez compiler vos programmes selon la norme C, vous devez saisir gcc -std=c99 -pedantic-errors . Remplacez c99 par c11 si votre version GCC le supporte.

165
répondu Lundin 2018-08-09 07:46:20

je dois répondre en ce qui concerne ANSI C. Bien que L'ANSI n'ait rien fait avec elle, compilateurs sont encore construits pour elle. Compilateur PIC XC16 par exemple: "Le compilateur est un compilateur entièrement validé qui est conforme à l'ANSI C norme telle que définie par la spécification ANSI (ANSI x3.159-1989) et décrit dans le langage de programmation C de Kernighan et Ritchie (deuxième édition.) ..." Tous les programmes ne sont pas pour les "grands" ordinateurs comme les PC. Écrire un compilateur pour les coûts de votre appareil, et la validation coûte du temps&$. ANSI C est vivant et bien & vivre dans vos appareils embarqués / en temps réel.

6
répondu C Is Better 2016-01-27 22:29:05
  • ANSI C : Le premier langage C a été standardisé par L'organisme appelé ANSI en 1989 c'est pourquoi il est appelé c89.

  • C99:

    avec la demande des exigences de développeurs, en 1999-2000 d'autres mots clés ou des fonctionnalités supplémentaires ont été inclus dans C99 (ex: inline, boolean.. Ajouté à virgule flottante arthematic des fonctions de la bibliothèque)

  • GNU C: GNU est un système d'exploitation de type unix (www.gnu.org) & somewhere le projet GNU a besoin d'un langage de programmation basé sur la norme ANSI C. GNU utilise le compilateur GCC (GNU Compiler Collection) pour compiler le code. Il a la fonction de bibliothèque C qui définit les appels système tels que malloc, calloc, exit...etc

"ANSI C" est une norme qui est utilisée par les autres normes ou qui a fait l'objet d'un arbitrage.

5
répondu Kapil Chittewan 2013-06-20 07:01:49

En Plus De Lundin Réponse

voici ce que Dennis Richie a à dire Quand demandé

" pourquoi K&R n'a-t-elle pas attendu la norme finale approuvée par L'ANSI avant de rédiger la 2e édition de K&R?"

pourquoi K&R n'a-t-elle pas attendu la version finale de la norme approuvée de L'ANSI avant d'écrire K&R 2e édition? On dirait que ce livre sera seulement la norme correcte pour quelques mois avant qu'elle ne soit supplantée par la norme finale de L'ANSI. Je sais qu'il y a probablement quelques changements majeurs à ce stade tardif, mais pourquoi pas attendez quelques mois et assurez-vous que vous obtenez à 100%, plutôt que de devoir presque immédiatement écrire un 3ème édition ou obsolètes?

Nous avons pensé qu'il serait sympa de marquer le 10ème anniversaire de la première édition. Plus sérieusement, nous avons commencé à travailler l'été dernier parce que nous avions le le temps et l'inclinaison alors, et il s'est avéré que X3J11 approchait fin. En décembre et Janvier, alors que nous terminions, nous avons envisagé si la possibilité de changements importants justifiait le report de livraison, et (après avoir discuté de la question avec l'éditeur) a décidé qu'il n'était pas la peine d'attendre. P-H le voulait, et les deux Brian et moi le voulions hors de nos agendas.

même si il y a des changements dans la norme, il est difficile d'imaginer qu'ils seraient assez pour justifier une nouvelle édition. (Nous étions même prêts à faire face d'une façon ou d'une autre à noalias, si cela avait duré.) Nous sommes prêts à faire les modifications nécessaires dans un avenir impression, mais il y a des raisons d'espérer qu'ils devraient être mineures. X3J11 de l' les membres sont très anxieux de finir sans surprendre les gens, aussi; beaucoup d'entre eux travaillent pour des entreprises qui préparent des compilateurs ANSI, après tout.

Dennis Ritchie

1
répondu Suraj Jain 2017-05-23 12:26:34

cette question n'a pas fait l'objet d'une recherche approfondie sur le net pour obtenir une réponse ,de toute façon vous pouvez regarder ceci:

  1. c est un langage de programmation universel initialement développé par Dennis Ritchie entre 1969 et 1973 à AT&T Bell Labs.
  2. C99 est une norme de la langue C publiée par L'ISO et adoptée par L'ANSI vers 1999.
  3. GNU C est juste une extension de c89, alors que certaines fonctionnalités de c99 sont également ajoutées, mais en l'ensemble est différent de la norme c99 donc lors de la compilation dans gcc nous devons entrer -std=c99 qui est déjà mentionné dans les autres réponses.
  4. ANSI C est une série de normes successives publiées par L'ANSI.
-3
répondu 0decimal0 2013-06-20 12:32:19