C99- und C-Kompatibilitätsausnahmen
Während C im Allgemeinen eine Teilmenge von C ist, verbieten bestimmte Nuancen in der C-Sprache die direkte Kompilierung einiger davon gültiger C-Code. Hier sind einige wichtige Unterschiede, die Sie berücksichtigen sollten:
1. Keine vorläufigen Definitionen
C erlaubt mehrere Deklarationen von Variablen mit demselben Namen, C jedoch nicht. Folglich lässt sich der folgende Code, der in C gültig ist, nicht in C kompilieren:
int n; int n; // ill-formed: n already defined
2. Inkompatible Array-Typen
In C können Arrays entweder mit der Syntax int[] oder int[N] deklariert werden. Allerdings behandelt C diese unterschiedlich. Der folgende Code, der in C gültig ist, löst in C einen Fehler aus:
int a[1]; int (*ap)[] = &a; // ill-formed: a does not have type int[]
3. K&R-Funktionsdefinitionsstil nicht zulässig
C unterstützt den K&R-Stil der Funktionsdefinition, C jedoch nicht. Der folgende Code, der in C gültig ist, lässt sich in C nicht kompilieren:
int b(a) int a; { } // ill-formed: grammar error
4. Unterschiede im Gültigkeitsbereich verschachtelter Strukturen
In C haben verschachtelte Strukturen den Gültigkeitsbereich Datei, während sie in C den Gültigkeitsbereich Klasse haben. Dies bedeutet, dass der folgende Code, der in C gültig ist, nicht in C kompiliert werden kann:
struct A { struct B { int a; } b; int c; }; struct B b; // ill-formed: b has incomplete type (*not* A::B)
5. Kein Standard-int
C erlaubt im Gegensatz zu C keine Standardisierung von Ganzzahlvariablen auf int. Daher löst der folgende Code, der in C gültig ist, einen Fehler in C aus:
auto a; // ill-formed: type-specifier missing
Zusätzliche Ausnahmen in C99
Zusätzlich zu diesen Ausnahmen führt C99 weitere Ausnahmen ein Inkompatibilitäten mit C:
Das obige ist der detaillierte Inhalt vonWelche Unterschiede zwischen C99- und C-Code verursachen Kompilierungsfehler?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!