Heim > Backend-Entwicklung > C++ > Warum kann mancher C-Code nicht in C kompiliert werden?

Warum kann mancher C-Code nicht in C kompiliert werden?

DDD
Freigeben: 2024-12-18 10:16:10
Original
402 Leute haben es durchsucht

Why Does Some C Code Fail to Compile in C  ?

C als Teilmenge von C: Erklärte Ausnahmen

Während oft behauptet wird, dass C eine Teilmenge von C ist, gibt es bestimmte Fälle, in denen dies der Fall ist Code kann in C nahtlos kompiliert werden, schlägt jedoch in C fehl.

Fälle, in denen Code fehlschlägt in C

  • Vorläufige Definitionen:
    C erlaubt mehrere Deklarationen desselben Variablennamens, C verbietet dies jedoch mit dem Fehler „n bereits definiert“. ."

    int n;
    int n; // error: redeclaration of 'n'
    Nach dem Login kopieren
  • Inkompatibles Array Typen:
    C ermöglicht die Zuweisung von Arrays zu Zeigern mit unterschiedlichen Typen (z. B. int[1] zu int *()), während C solche Konvertierungen nicht zulässt.

    int a[1];
    int (*ap)[] = &a; // error: 'a' does not have type 'int[]'
    Nach dem Login kopieren
  • K&R-Funktionsdefinitionsstil:
    C erlaubt Funktionsdefinitionen mit der Syntax int b(a) int A; { }, aber C hält es für einen Grammatikfehler.

    int b(a) int a; { } // error: grammar error
    Nach dem Login kopieren
  • Verschachtelter Strukturbereich:
    C ermöglicht die Deklaration verschachtelter Strukturen mit Klassenbereich, aber C behandelt sie als lokale Variablen stattdessen.

    struct A { struct B { int a; } b; int c; };
    struct B b; // error: 'b' has incomplete type
    Nach dem Login kopieren
  • Standarddeklarationen:
    C ermöglicht die Deklaration von Variablen ohne Angabe ihres Typs (z. B. auto a;), aber C erfordert eine explizite Typbezeichner.

    auto a; // error: type-specifier missing
    Nach dem Login kopieren

Zusätzliche Ausnahmen in C99

  • Array-Dimensionen in Parametern:
    C99 verbietet Spezifizierer wie static in Array-Dimensionen von Funktionsparametern.

    void f(int p[static 100]) { } // error: invalid syntax
    Nach dem Login kopieren
  • Variable Länge Arrays:
    C99 unterstützt keine Arrays variabler Länge (VLAs), bei denen Array-Größen zur Laufzeit berechnet werden.

    int n = 1;
    int an[n]; // error: 'n' is not a constant expression
    Nach dem Login kopieren
  • Flexible Array-Mitglieder:
    In C99 fehlen flexible Array-Mitglieder (FAMs), die Datenelemente variabler Größe enthalten können Strukturen.

    struct A { int a; int fam[]; }; 
    // error: 'fam' has incomplete type
    Nach dem Login kopieren
  • Restrict Qualifier:
    C99 ermöglicht dem Restrict Qualifier, Nicht-Aliasing des Speichers anzugeben, was C nicht unterstützt.

    void copy(int *restrict src, int *restrict dst); // error: two names for one parameter
    Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum kann mancher C-Code nicht in C kompiliert werden?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage