Maison > développement back-end > C++ > Quelles différences entre les codes C99 et C provoquent des erreurs de compilation ?

Quelles différences entre les codes C99 et C provoquent des erreurs de compilation ?

Barbara Streisand
Libérer: 2024-12-16 09:23:11
original
615 Les gens l'ont consulté

What C99 and C   Code Differences Cause Compilation Errors?

Exceptions de compatibilité C99 et C

Bien que C soit généralement un sous-ensemble de C, certaines nuances dans le langage C interdisent la compilation directe de certains code C valide. Voici quelques différences clés à prendre en compte :

1. Aucune définition provisoire

C autorise plusieurs déclarations de variables portant le même nom, mais pas C. Par conséquent, le code suivant, valable en C, ne sera pas compilé en C :

int n;
int n; // ill-formed: n already defined
Copier après la connexion

2. Types de tableaux incompatibles

En C, les tableaux peuvent être déclarés avec la syntaxe int[] ou int[N]. Cependant, C les traite différemment. Le code suivant, qui est valide en C, générera une erreur en C :

int a[1];
int (*ap)[] = &a; // ill-formed: a does not have type int[]
Copier après la connexion

3. Style de définition de fonction K&R interdit

C prend en charge le style K&R de définition de fonction, mais pas C. Le code suivant, valide en C, ne sera pas compilé en C :

int b(a) int a; { } // ill-formed: grammar error
Copier après la connexion

4. Différences de portée des structures imbriquées

En C, les structures imbriquées ont une portée de fichier, tandis qu'en C, elles ont une portée de classe. Cela signifie que le code suivant, qui est valide en C, ne sera pas compilé en C :

struct A { struct B { int a; } b; int c; };
struct B b; // ill-formed: b has incomplete type (*not* A::B)
Copier après la connexion

5. No Default int

C ne permet pas de définir des variables entières par défaut sur int, contrairement à C. Par conséquent, le code suivant, qui est valide en C, générera une erreur en C :

auto a; // ill-formed: type-specifier missing
Copier après la connexion

Exceptions supplémentaires dans C99

En plus de ces exceptions, C99 introduit d'autres incompatibilités avec C :

  • Aucune gestion particulière des spécificateurs de déclaration dans les dimensions du tableau des paramètres.
  • Aucun tableau de longueur variable.
  • Aucun membre de tableau flexible.
  • Aucun qualificatif de restriction pour l'analyse d'alias.

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