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

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

Dec 18, 2024 am 10:16 AM

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!

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

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert? Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert? Mar 03, 2025 pm 05:52 PM

Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert?

GULC: C -Bibliothek von Grund auf neu gebaut GULC: C -Bibliothek von Grund auf neu gebaut Mar 03, 2025 pm 05:46 PM

GULC: C -Bibliothek von Grund auf neu gebaut

C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte Mar 03, 2025 pm 05:53 PM

C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte

Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die? Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die? Mar 03, 2025 pm 05:53 PM

Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die?

eindeutiger Gebrauch und Phrasenfreigabe eindeutiger Gebrauch und Phrasenfreigabe Mar 03, 2025 pm 05:51 PM

eindeutiger Gebrauch und Phrasenfreigabe

Wo ist der Rückgabewert der C -Sprachfunktion im Speicher? Wo ist der Rückgabewert der C -Sprachfunktion im Speicher? Mar 03, 2025 pm 05:51 PM

Wo ist der Rückgabewert der C -Sprachfunktion im Speicher?

Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)? Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)? Mar 12, 2025 pm 04:50 PM

Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)?

Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient? Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient? Mar 12, 2025 pm 04:52 PM

Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient?

See all articles