Maison >développement back-end >C++ >Quelles différences entre les codes C99 et C provoquent des erreurs de compilation ?
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 :
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!