Si vous comparez C89
avec C++
, alors voici un couple de choses
Aucune tentative de définitions en C++
int n;
int n; // ill-formed: n already defined
int[] et int[N] n'est pas compatible (pas compatible avec les types en C++)
int a[1];
int (*ap)[] = &a; // ill-formed: a does not have type int[]
Pas de K&R, la fonction de définition de style
int b(a) int a; { } // ill-formed: grammar error
Imbriquée struct a portée de la classe en C++
struct A { struct B { int a; } b; int c; };
struct B b; // ill-formed: b has incomplete type (*not* A::B)
Pas de valeur par défaut int
auto a; // ill-formed: type-specifier missing
C99 ajoute tout un tas d'autres cas
Pas de traitement particulier de la déclaration des prescripteurs dans les dimensions du tableau de paramètres
// ill-formed: invalid syntax
void f(int p[static 100]) { }
Aucune variable de tableaux de longueur
// ill-formed: n is not a constant expression
int n = 1;
int an[n];
Pas de flexibilité membre du groupe
// ill-formed: fam has incomplete type
struct A { int a; int fam[]; };
Pas de restreindre qualificatif pour aider aliasing analyse
// ill-formed: two names for one parameter?
void copy(int *restrict src, int *restrict dst);