web-dev-qa-db-fra.com

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

J'ai commencé la pratique de la programmation sur codechef et j'ai été dérouté par la différence entre C et C99. Que veut dire C ici? C89? Vérifiez les langues au bas de this submit . Il contient à la fois C et C99.

J'ai trouvé sur Internet quelque chose appelé GNU C. Existe-t-il un C différent pour les systèmes Linux/Unix? Sont-ils conformes aux normes C de l'ANSI? J'ai aussi lu à certains endroits "C99 strict ". Qu'est-ce que c'est?

Existe-t-il d'autres normes de C utilisées? Existe-t-il un élément appelé C 4.3.2 ou s'agit-il de la version actuelle de gcc?

MODIFIER:

Ceci , Ceci , Ceci aidé. Je vais chercher plus et éditer les choses qui sont laissées sans réponse.

Je ne suis pas un débutant en programmation. Je sais ce qu'est le langage C. Je sais qu'il existe différentes normes C de la norme ANSI telles que C89, C99 et C11.

114
Aseem Bansal
  • Tout ce qui avant la normalisation s’appelle généralement "K & R C", après le célèbre livre , avec Dennis Ritchie, l’inventeur du langage C, en est l’un des auteurs. C'était "la langue C" de 1972-1989.

  • La première norme C a été publiée aux États-Unis en 1989, aux États-Unis, par leur institut national de référence, l'ANSI. Cette version s'appelle C89 ou ANSI-C. De 1989 à 1990, c'était "le langage C".

  • L'année suivante, la norme américaine a été acceptée à l'échelle internationale 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, il a remplacé C89/ANSI-C, les rendant obsolètes. De 1990 à 1999, le C90 était "le langage C".

    Veuillez noter que depuis 1989, ANSI n'a rien eu à faire avec le langage C. Les programmeurs qui parlent encore de "ANSI C" n’ont généralement aucune idée de ce que cela signifie. ISO "possède" le langage C, par le biais de la norme ISO 9899.

  • Une mise à jour mineure a été publiée en 1995, parfois appelée "C95". Il ne s’agissait pas d’une révision majeure, mais plutôt d’un amendement technique officiellement nommé ISO/IEC 9899: 1990/AMD.1: 1995. Le principal changement a été l’introduction du support de caractères étendus.

  • En 1999, la norme C a subi une révision majeure (ISO 9899: 1999). Cette version de la norme s'appelle C99. De 1999 à 2011, c'était "le langage C".

  • En 2011, la norme C a encore été modifiée (ISO 9899: 2011). Cette version s'appelle C11. Diverses nouvelles fonctionnalités comme _Generic, _Static_assert et le support des threads ont été ajoutés à la langue. La mise à jour mettait beaucoup l'accent sur le séquençage multi-cœur, multi-traitement et d'expression. De 2011 à 2017, c'était "le langage C".

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


"C99 strict" fait probablement référence à un paramètre du compilateur obligeant un compilateur à suivre la norme à la lettre. Il existe un terme conforme à l'implémentation dans la norme C. Cela signifie essentiellement: "ce compilateur implémente correctement le langage C". Les programmes qui implémentent correctement le langage C sont officiellement appelés des programmes strictement conformes .

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

Si vous voulez compiler vos programmes selon le standard C, vous devez taper gcc -std=c99 -pedantic-errors. Remplacez c99 par c11 si votre version de GCC le prend en charge.

194
Lundin

Je dois répondre à propos de l'ANSI C. Bien que l'ANSI n'ait rien fait avec, les compilateurs y sont toujours construits. Le compilateur PIC XC16, par exemple: "Le compilateur est un compilateur entièrement validé, conforme à la norme ANSI C définie par la spécification ANSI (ANSI x3.159-1989) et décrite dans Le langage de programmation C de Kernighan et Ritchie (deuxième édition). ... "Toute la programmation n'est pas destinée aux" gros "ordinateurs comme les PC. Ecrire un compilateur pour les coûts de votre appareil, et valider les coûts en temps et en dollars. ANSI C est bien vivant et vit bien dans vos appareils embarqués/temps réel.

7
C Is Better
  • ANSI C: Le premier langage C a été normalisé par l'organisme appelé ANSI en 1989, c'est pourquoi il s'appelle c89.

  • C99:
    A la demande des développeurs, en 1999-2000, des mots-clés et des fonctionnalités supplémentaires ou supplémentaires ont été inclus dans C99 (ex: inline, boolean .. Fonctions de bibliothèque arthematic en virgule flottante ajoutées)

  • GNU C: GNU est un système d’exploitation semblable à unix (www.gnu.org) & quelque part Le projet de GNU a besoin d’un langage de programmation C basé sur le standard ANSI C. GNU utilisez le compilateur GCC (GNU Compiler Collection) pour compiler le code.Il a une 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 ou référencée par les autres normes.

5
Kapil Chittewan

En plus de Lundin réponse

Voici ce que Dennis Richie doit faire Dites à la question

"Pourquoi K & R n'a-t-il pas attendu la dernière norme ANSI approuvée avant d'écrire la 2e édition de K & R?"

Pourquoi K & R n'a-t-il pas attendu la dernière norme ANSI approuvée avant d'écrire la 2e édition de K & R? Il semble que ce livre ne sera la norme correcte que quelques mois avant d'être remplacé par la norme ANSI finale. Je sais qu'il y aura probablement peu de changements majeurs à ce stade avancé, mais pourquoi ne pas attendre quelques mois et vous assurer que tout est correct, au lieu de devoir écrire presque immédiatement une 3ème édition ou être obsolète?

Nous pensions que ce serait bien de marquer le 10e anniversaire de la première édition. Plus sérieusement, nous avons commencé à travailler l'été dernier parce que nous avions le temps et l'envie de le faire et qu'il semblait que X3J11 touchait à sa fin. En décembre et janvier, alors que nous terminions, nous avons examiné si la possibilité d'importants changements justifiait un report de livraison et nous avons décidé (après en avoir discuté avec l'éditeur) que cela ne valait pas la peine d'attendre. P-H le voulait, et Brian et moi le voulions dans nos agendas.

Même s'il y a des changements dans la norme, il est difficile d'imaginer qu'ils seraient suffisamment détaillés pour justifier une nouvelle édition. (Nous étions même prêts à faire face aux noalias, si cela avait duré.) Nous sommes prêts à apporter les modifications nécessaires à une prochaine impression, mais il y a lieu d'espérer qu'elles seront mineures. Les membres de X3J11 ont très hâte de terminer sans surprendre les autres. nombre d'entre eux travaillent pour des entreprises qui préparent des compilateurs ANSI, après tout.

Dennis Ritchie

1
Suraj Jain