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
158 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!

source:php.cn
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal