Maison > développement back-end > C++ > En quoi les règles plus strictes de C diffèrent-elles de l'approche plus indulgente de C ?

En quoi les règles plus strictes de C diffèrent-elles de l'approche plus indulgente de C ?

Barbara Streisand
Libérer: 2024-12-15 05:06:30
original
258 Les gens l'ont consulté

How Does C  's Stricter Rules Differ from C's More Lenient Approach?

L'incomplétude de C : là où C s'écarte de son sous-ensemble

Malgré les affirmations fréquentes selon lesquelles C est entièrement contenu dans C, des distinctions subtiles rendent cela affirmation incomplète. Cet article met en évidence les cas où le code acceptable en C devient incompatible en C , mettant en lumière les différences qui les distinguent.

Définition complexe

C applique des règles plus strictes pour les variables définitions, interdisant toute tentative. Déclarer la même variable à plusieurs reprises, comme dans int n ; int n;, n'est pas autorisé en C , contrairement à C.

Disparité de compatibilité des tableaux

C introduit des contraintes de compatibilité de type qui n'existent pas en C. En C, un tableau int a[1] peut être affecté à un pointeur int (*ap)[] = &a, bien qu'il soit de types différents (int[] vs. int[1]). Cette affectation échouerait en C.

Définitions de fonctions obsolètes

C abandonne le style K&R de définitions de fonctions, rendant des constructions comme int b(a) int a ; { } syntaxiquement incorrect.

Différence de portée des structures imbriquées

Les structures imbriquées en C ont une portée de classe, contrairement à C. Par conséquent, déclarer une structure imbriquée en dehors d'une structure englobante définition, telle que struct B b;, entraîne une erreur de type incomplète en C .

Spécificateurs de type explicites requis

C impose des spécificateurs de type explicites pour toutes les déclarations. L'omission des informations de type, comme dans auto a;, entraîne des erreurs de syntaxe.

C99 contribue à d'autres divergences

C99 introduit des incompatibilités supplémentaires :

  • Dimensions du tableau : Les spécificateurs de déclaration dans les dimensions du tableau des listes de paramètres doivent désormais s'aligner sur Syntaxe C (void f(int p[static 100]) { }).
  • Tableaux de longueur variable : C interdit les expressions non constantes pour les calculs de dimensions de tableau (int n = 1 ; int an[n];).
  • Membres du tableau flexibles : C interdit les membres du tableau flexibles (struct A { int a; int fam[]; }).
  • Qualificateurs de restriction : C introduit des qualificatifs de restriction pour l'analyse des alias, qui sont absents de C (void copy(int *restrict src, int *restreindre l'heure d'été);).

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal