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
Barbara Streisandoriginal
2024-12-16 09:23:11617parcourir

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

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[]

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

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)

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

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!

Déclaration:
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