Warum kann mancher C-Code nicht in C kompiliert werden?
Dec 18, 2024 am 10:16 AMC 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!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

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

GULC: C -Bibliothek von Grund auf neu gebaut

C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte

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

eindeutiger Gebrauch und Phrasenfreigabe

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

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

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