Die Unvollständigkeit von C: Wo C von seiner Teilmenge abweicht
Trotz häufiger Behauptungen, dass C vollständig in C enthalten sei, wird dies durch subtile Unterscheidungen deutlich Behauptung unvollständig. Dieser Artikel beleuchtet Fälle, in denen in C akzeptabler Code in C inkompatibel wird, und beleuchtet die Unterschiede, die ihn auszeichnen.
Komplizierte Bestimmtheit
C erzwingt strengere Regeln für Variablen Definitionen, die Vorläufigkeit verbieten. Wiederholtes Deklarieren derselben Variablen, wie in int n; int n;, ist in C unzulässig, anders als in C.
Array-Kompatibilitätsdisparität
C führt Typkompatibilitätseinschränkungen ein, die in C nicht existieren. In C, Ein Array int a[1] kann einem Zeiger int (*ap)[] = &a zugewiesen werden, obwohl es unterschiedliche Typen hat (int[] vs. int[1]). Diese Zuweisung würde in C fehlschlagen.
Veraltete Funktionsdefinitionen
C gibt den K&R-Stil von Funktionsdefinitionen auf und gibt Konstruktionen wie int b(a) int a; { } syntaktisch falsch.
Unterschied beim Gültigkeitsbereich verschachtelter Strukturen
Verschachtelte Strukturen in C haben im Gegensatz zu C einen Klassenbereich. Folglich ist die Deklaration einer verschachtelten Struktur außerhalb einer umschließenden Struktur erforderlich Definition wie struct B b; führt zu einem unvollständigen Typfehler in C .
Explizite Typspezifizierer erforderlich
C schreibt explizite Typspezifizierer für alle Deklarationen vor. Das Weglassen von Typinformationen, wie in auto a;, führt zu Syntaxfehlern.
C99 trägt zu weiteren Diskrepanzen bei
C99 führt zu zusätzlichen Inkompatibilitäten:
Das obige ist der detaillierte Inhalt vonWie unterscheiden sich die strengeren Regeln von C vom milderen Ansatz von C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!