die größten C++ Lügen

In der langen Geschichte von C++ wurden auch zahlreiche Tutorials und Bücher geschrieben, die sich mit C++ befassen. Da aber C++ im Verlauf der Zeit erweitert und geändert wurden, sind heute viele dieser Bücher/Tutorials veraltet und verbreiten wissen, welches nicht mehr stimmt oder nie stimmte.

Deswegen will ich nun vor Fehlern und Problemen warnen, die leider immer noch durch die C++-Welt geistern:

void main()

Ich weiß nicht woher das Gerücht kam, vermutlich daher, dass einige Leute den alten K&R-Code missinterpretierten, bei dem wenn kein Rückgabetyp bei einer Funktion angegeben wurde automatisch int angenommen wurde. Aber in zahlreichen Büchern und Tutorials wird erklärt, dass void main() legales C++ sei, dass ist aber falsch! Es gab keinen C++-Standard, der je void main für legal erklärte. Die main-Funktion muss immer int zurückgeben!

iostream.h

Vor dem C++-Standard (C++98) hatten alle Header der Standard-Library das aus C bekannte .h als Suffix, aber mit dem C++-Standard wurde das .h-Suffix weggelassen und die Standard-Library in den Namespace std verpackt. Denn die neuen Header beinhalten signifikante Änderungen, die teilweise unvereinbar mit den alten Headern sind. Leider wird in zahlreichen Büchern und Tutorials immer noch die alte Methode gelehrt.

C als Klassen Prefix

Einige Leute benutzen für Klassennamen ein C als Prefix (zB. class CAuto;). Das C-Prefix, hat seine Geschichte in der MFC-Library. Die MFC ist eine C++ Library, mit deren Hilfe man Windowsprogramme erstellen kann. Die MFC wurde vor dem C++-Standard entwickelt und einige Features wie Namespaces waren noch nicht vorhanden bzw. die Compiler unterstützten diese nur unzureichend. Um Namenskonflikte zu vermeiden (Window ist wirklich kein seltener Klassenname!), entschlossen sich die Microsoft Entwickler dazu ein C als Prefix für die Klassennamen einzuführen. C wurde vermutlich für Class (also Klasse) genommen (siehe "Ungarische-Notation"). Nun übernahmen aber viele Programmierer das C als Prefix für ihre Klassen. So wurde nicht nur die Gefahr der Namenskollision wieder eingegangen, sondern die Bezeichner klingen nicht mehr eindeutig und mehr verwirrend. Warum die MFC Entwickler nicht MFC als Prefix genommen haben, was eindeutiger gewesen waere und sicher keine Nachahmer gefunden hätte, ist mir schleierhaft. Siehe hierzu auch CObject und seine Probleme.

Ungarische Notation

Die Ungarische-Notation ist eine Notation für Bezeichnernamen, die von Microsoft entwickelt wurde. Dabei wird im Bezeichner der Variabeln-Typ kodiert, also zB. eine char-Variable würde nun cFoo oder eine int-Variabel wurde nFoo heissen. Diese Notation, ist aber sehr umstritten, nicht nur weil es verwirrender ist sich komplizierte Dateinamen zu merken oder Konzepte an bestimmten Typen fest zu machen, in C++ kommt noch die Problematik hinzu, dass man eigene Typen erzeugen kann (Klassen) und es für die Klassennamen natürlich kein einheitliches Namensschema gibt, was zu noch mehr Verwirrung und Unordnung führen kann. Siehe hierzu auch CObject und seine Probleme.

Vielen Dank an Rüdiger Sonderfeld (kingruedi), der mir diesen Text zur verfügen stellte.

top