Heim >Backend-Entwicklung >C++ >Wie unterscheiden sich die strengeren Regeln von C vom milderen Ansatz von C?

Wie unterscheiden sich die strengeren Regeln von C vom milderen Ansatz von C?

Barbara Streisand
Barbara StreisandOriginal
2024-12-15 05:06:30164Durchsuche

How Does C  's Stricter Rules Differ from C's More Lenient Approach?

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:

  • Array-Dimensionen: Deklarationsspezifizierer in Array-Dimensionen von Parameterlisten muss jetzt mit der C-Syntax übereinstimmen (void f(int p[static 100]) { }).
  • Arrays mit variabler Länge: C verbietet nicht konstante Ausdrücke für Array-Dimensionsberechnungen (int n = 1; int an[n];).
  • Flexible Array-Mitglieder:C nicht zulässig flexible Array-Mitglieder (struct A { int a; int fam[]; }).
  • Einschränkungsqualifizierer: C führt Einschränkungsqualifizierer für die Aliasanalyse ein, die in C fehlen (void copy( int *restrict src, int *restrict dst);).

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!

Stellungnahme:
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