Breaking Changes in C 11
C 11 führte wesentliche Änderungen ein, die sich auf die Kompilierung von vorhandenem Code auswirken können, einschließlich der folgenden:
Kernsprache
- Die Einführung expliziter Operatoren bool() in der Standardbibliothek und ersetzt Instanzen des Operators void*(). Diese Änderung kann dazu führen, dass Code, der zuvor auf impliziten Konvertierungen beruhte, nicht kompiliert werden kann.
- Neue Schlüsselwörter, einschließlich alignas, alignof, char16_t, constexpr und nullptr, können mit vorhandenen Bezeichnern in Code in Konflikt geraten, der nicht den Namenskonventionen entsprach .
- Das Verhalten der Ganzzahldivision hat sich geändert, da C 11 das Ergebnis immer in Richtung 0 rundet, während C 03 Das Runden in Richtung 0 oder negativer Unendlichkeit ist zulässig.
- Implizit deklarierte spezielle Elementfunktionen wie Konstruktoren oder Destruktoren gelten jetzt als gelöscht, wenn ihre implizite Definition falsch formatiert gewesen wäre, was dazu führen kann, dass Code diese Funktionen verwendet Funktionen werden in bestimmten Kontexten ungültig.
- Benutzerdeklarierte Destruktoren haben eine implizite Ausnahmespezifikation, was bedeutet, dass sie keine Ausnahmen auslösen können. Code, der auf Destruktoren basiert, die Ausnahmen auslösen, muss möglicherweise geändert werden.
- Abhängige Aufrufe von Funktionen mit interner Verknüpfung sind jetzt zulässig, was die Auflösung überladener Funktionen in Vorlagen ändern kann.
Bibliotheksänderungen
- Bezeichner, die der C-Standardbibliothek in C hinzugefügt wurden 11 kann mit vorhandenen Bezeichnern im Code in Konflikt geraten, der Header mit denselben Namen verwendet.
- Die Swap-Funktion wurde aus dem verschoben. Header zum Kopfzeile. Code, der Möglicherweise muss es aktualisiert werden, um stattdessen.
- Der globale Namensraum posix ist jetzt für die Standardisierung reserviert. Code, der Bezeichner in diesem Namespace definiert, muss möglicherweise geändert werden.
- Makros mit den Namen „override“, „final“, „carries_dependency“ oder „noreturn“ sind in C 11 ungültig. Code, der diese Makros definiert, muss möglicherweise aktualisiert werden.
Das obige ist der detaillierte Inhalt vonWelche wichtigen Änderungen sollte ich bei der Migration von Code auf C 11 beachten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!