44 votes

Quelles sont les principales différences entre les normes ANSI C et K&R C?

L' article de Wikipedia sur le C ANSI dit:

L'un des objectifs de la norme ANSI C processus de normalisation a été de produire un sur-ensemble de K&R C (le premier a publié la norme), en incorporant de nombreux officieux caractéristiques introduite par la suite. Toutefois, le comité des normes comprenait également plusieurs nouvelles fonctionnalités, telles que les prototypes de fonction (emprunté au langage de programmation C++), et plus capable de préprocesseur. La syntaxe pour les déclarations de paramètres a également été modifié pour refléter le style C++.

Cela me fait penser qu'il y a des différences. Cependant, je n'ai pas vu une comparaison entre le K&R C et ANSI C. existe-t-il un document? Si non, quelles sont les principales différences?

EDIT: je crois que le K&R livre dit "ANSI C" sur la couverture. Au moins, je crois que la version que j'ai à la maison ne. Alors peut-être il n'y a pas plus de différence?

29voto

Chris Conway Points 24671

Il peut y avoir une certaine confusion sur ce que les "K&R C" est. Le terme se réfère à la langue comme indiqué dans la première édition de "The C Programming Language". Grosso modo: la langue d'entrée de la Bell Labs compilateur C circa 1978.

Kernighan et Ritchie ont été impliqués dans le processus de normalisation ANSI. Le "ANSI C" dialecte supplanté "K&R C" et les éditions ultérieures de "The C Programming Language" adopter la norme ANSI conventions. "K&R C" est une "langue morte", sauf dans la mesure où certains compilateurs acceptent encore le code de legs.

16voto

tuxedo Points 299

Les prototypes de fonction ont été le changement le plus évident entre le K&R C et C89, mais il y avait beaucoup d'autres. Beaucoup de travail important est allé dans la normalisation de la bibliothèque C de trop. Même si la bibliothèque standard C était une codification de la pratique existante, il codifié de multiples pratiques existantes, ce qui la rend plus difficile. P. J. Plauger du livre, La Bibliothèque Standard C, est une référence, et dit aussi de certains de derrière-le-scènes les détails de pourquoi la bibliothèque fini par la façon dont il l'a fait.

La norme ANSI/ISO C standard est très similaire à K&R C dans la plupart des façons. Il était prévu que la plupart des C code devrait s'appuyer sur la norme ANSI compilateurs sans beaucoup de changements. Surtout, si, dans la pré-norme époque, la sémantique de la langue ont été ouverts à l'interprétation par chaque fournisseur de compilateur. C ANSI a dans une commune de la description de la sémantique de la langue qui a mis tous les compilateurs sur un pied d'égalité. Il est facile de prendre pour acquis maintenant, 20 ans plus tard, mais cela a été une réalisation importante.

Pour la plupart, si vous n'avez pas de pré-standard C de la base de code à maintenir, vous devriez être heureux que vous n'avez pas à vous inquiéter à ce sujet. Si vous le faites, ou pire encore, si vous êtes en essayant de mettre un vieux programme de plus en plus à des normes modernes--alors vous avez ma sympathie.

12voto

FreeMemory Points 4742

Il y a quelques différences mineures, mais je pense que plus tard, les éditions de K&R pour la norme ANSI C, donc il n'y a pas de réelle différence plus.
"C Classique" par manque d'un meilleur termes avaient une façon légèrement différente de la définition des fonctions, c'est à dire

int f( p, q, r )  
int p, float q, double r;  
{  
    // Code goes here  
}

Je crois que l'autre différence a été des prototypes de fonction. Prototypes n'ont pas tout à fait, ils ne pouvaient pas prendre une liste d'arguments ou des types. En C ANSI qu'ils font.

6voto

vivek shukla Points 21
  1. prototype de fonction.
  2. constant & volatils qualificatifs.
  3. caractère large soutien et à l'internationalisation.
  4. permis de pointeur de fonction pour être utilisé sans être déréférencé.

3voto

Ferruccio Points 51508

Une autre différence est que la fonction des types de retour et les types de paramètre n'a pas besoin d'être défini. Ils seraient supposés être des entiers.

f(x)
{
    return x + 1;
}

et

int f(x)
int x;
{
    return x + 1;
}

sont identiques.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X