Heim > Backend-Entwicklung > C++ > Welche Unterschiede zwischen C99- und C-Code verursachen Kompilierungsfehler?

Welche Unterschiede zwischen C99- und C-Code verursachen Kompilierungsfehler?

Barbara Streisand
Freigeben: 2024-12-16 09:23:11
Original
576 Leute haben es durchsucht

What C99 and C   Code Differences Cause Compilation Errors?

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
Nach dem Login kopieren

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[]
Nach dem Login kopieren

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
Nach dem Login kopieren

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)
Nach dem Login kopieren

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
Nach dem Login kopieren

Zusätzliche Ausnahmen in C99

Zusätzlich zu diesen Ausnahmen führt C99 weitere Ausnahmen ein Inkompatibilitäten mit C:

  • Keine spezielle Behandlung von Deklarationsspezifizierern in Array-Dimensionen von Parametern.
  • Keine Arrays variabler Länge.
  • Kein flexibles Array-Mitglied.
  • Kein Einschränkungsqualifikator für Aliasing-Analyse.

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage