Weder GCC noch Clang sind vollständig konform zum C++-Standard: die Erinnerung

Dev & Code 18 h agoZu Lesezeichen hinzufügen

Weder GCC noch Clang sind vollständig konform zum C++-Standard: die Erinnerung
Illustration : Momiji Shirogane

Ein Beitrag, der auf der Titelseite von Hacker News hochgestuft wurde, erinnert an eine Wahrheit, die viele C++-Entwickler lieber ignorieren: Weder GCC noch Clang implementieren 100 % des Standards. Praktische Aufschlüsselung.

Ni GCC ni Clang ne sind vollständig konform mit dem C++-Standard

Ein Beitrag auf sebsite.pw, der auf Hacker News hochgeladen wurde, erinnert an eine Wahrheit, die viele C++-Entwickler lieber ignorieren: Die beiden größten Open-Source-Compiler der Welt, GCC (GNU Compiler Collection) und Clang (Frontend des LLVM-Projekts), sind nicht vollständig konform mit dem C++-Standard. Keiner von ihnen war es jemals zu 100 %.

Der Kontext

Der C++-Standard (ISO/IEC 14882) ist ein Werk von über 2.000 Seiten. Jede neue Version (C++17, C++20, C++23, C++26 in Vorbereitung) fügt Funktionen hinzu, die die Implementierer nachziehen müssen. In der Praxis implementiert kein Compiler 100 % des Standards rechtzeitig; es gibt immer "Feature X partially supported" oder "Feature Y not implemented" in den Konformitätstabellen. Die offizielle und aktuelle Liste ist auf cppreference.com (Seite "Compiler support") einsehbar.

Was der Beitrag aufwirft

Der Autor des Beitrags beleuchtet einen Fall, in dem sich GCC und Clang vom Standard entfernen: Entweder akzeptieren sie ein Programm, das der Standard verbietet, oder sie lehnen ein Programm ab, das perfekt konform ist. Die genaue Natur des Fehlers (Frontend, ABI, Optimierer) bestimmt die Auswirkungen - von "falsche Diagnose" bis zu "stillschweigend fehlerhaftem Code".

Für einen Senior-Entwickler stellt sich daher nicht die Frage, ob sein Compiler fehlerhaft ist - die Antwort ist ja, wie jede Software mit 20+ Mio. Zeilen - sondern wo die Risikobereiche liegen und welche er in der Praxis trifft.

Was zu tun ist, wenn es passiert

  1. Auf beiden Compilern replizieren: Wenn GCC "Fehler" sagt und Clang "OK", ist die Wahrscheinlichkeit groß, dass einer der beiden unrecht hat - nützlich, um den Schuldigen zu isolieren.
  2. Compiler Explorer (godbolt.org) mit mehreren Versionen von GCC/Clang/MSVC parallel konsultieren: Mit wenigen Klicks können fünf Backends auf einmal verglichen werden.
  3. Melden auf bugzilla.gcc.gnu.org oder bugs.llvm.org - die Wartungsverantwortlichen sind reaktionsschnell und die Fehlerbehebung erfolgt oft innerhalb weniger Tage.
  4. Umgehen, indem man einen -std=c++17 festlegt oder die problematische Konstruktion isoliert, bis sie gepatcht ist.

Zu beachten

Der C++-Standard ist nicht die Bibel, und die Compiler sind keine Heiligen. Wenn Ihr Code auf GCC 15, aber nicht auf Clang 20 kompiliert, ist das nichts "Wunderbares" - nur zwei Implementierungen, zwei Interpretationen, ein zu großer Standard. Bleiben Sie pragmatisch, halten Sie godbolt offen.

Resources

Artikel von künstlicher Intelligenz erstellt, unter menschlicher redaktioneller Kontrolle geprüft.

Unsere Redaktion
War dieser Artikel hilfreich?

23 Personen gefiel dieser Artikel

Gefällt mir
K
Kaito KuroganeSenior-Redakteur (m/w/d)
Senior-Entwickler mit breitem Spektrum, Backend Go + Frontend TS, Open-Source-Beiträger
Teilen:
LIVERadio Geek Kitsune
Tippen zum Hören – für alle derselbe Sound
0··
// Programm
// all stations
// Track teilen →
Themen
Erkunden
Informationen