C++-Programmierung/ Einführung zum Buch/ Konventionen
Konventionen sind Regeln, die in der Programmierung verwendet werden, um die Übersichtlichkeit des Quellcodes zu erhöhen. Diese Regeln werden vom Programmierer festgelegt und entsprechend werden Sie, wenn Sie sich verschiedene Projekte ansehen, sehr wahrscheinlich auch unterschiedliche Konventionen erkennen. Im Laufe des Lebens entwickelt eigentlich jeder Programmierer seine eigenen Konventionen. Daher ist es wichtig, sich auf eine Liste von Konventionen zu einigen, wenn man in einem Projekt mit mehreren Entwicklern zusammenarbeitet. Da dieses Buch nicht ausschließlich von einem Autor geschrieben wird, handelt es sich auch hierbei um ein solches Projekt.
Innerhalb des Buches wird an verschiedenen Stellen auf einzelne Konventionen eingegangen. Dabei werden auch alternative Möglichkeiten zu den hier verwendeten aufgeführt. Wir werden in diesem Kapitel versuchen, eine vollständige Liste der in diesem Buch verwendeten Konventionen aufzustellen. Der unerfahrene Leser wird damit nicht viel anfangen können und kann den Rest des Kapitels daher überspringen, um später darauf zurück zu kommen. Für Co-Autoren sollte die Liste jedoch von großem Wert sein.
- Bezeichner (selbstvergebene Namen, engl. identifier) werden vollständig klein geschrieben. Besteht ein Bezeichner aus mehreren Wörtern, so werden diese mit Unterstrich getrennt.
- Ausnahme: Templateparameter (Vorlagenparameter). Diese beginnen mit einem Großbuchstaben und die Trennung erfolgt wiederum mit einem Großbuchstaben und ohne Unterstrich.
- Die Namen für Quell- (
.cpp
) und Headerdateien (.hpp
) sowie für Unterverzeichnisse folgen den Konventionen für Bezeichner. - Eine Einrückung besteht aus vier Leerzeichen.
- Eingebaute Datentypen werden abgekürzt (
long
stattsigned long int
), Ausnahme:unsigned int
undsigned int
, Achtung:char
ist nicht zwingend gleichsigned char
! - Im globalen Namensraum werden keine
using
-Direktiven verwendet. Eigentlich sollten im globalen Namensraum ausschließlich benannte Namensräume stehen. Das würde im Buch jedoch den Beispielcode aufblähen. Daher verzichten wir ausnahmsweise darauf. - Bezeichner aus anderen Namensräumen sollten per
using
-Deklaration eingefügt werden. Das spart Tipparbeit und hat in Zusammenhang mit Templates (Vorlagen) auch einen technisch sinnvollen Effekt (argumentabhängige Namenssuche). Da dies zwar in der Breite Platz spart, jedoch zusätzliche Zeilen benötigt, wird in unbedenklichen Fällen innerhalb des Buches direkt zugegriffen. Dies gilt insbesondere fürstd::cout
,std::cin
undstd::endl
. - Es werden nur Zeilenkommentare (
// Kommentar
) verwendet. C-Kommentare (/* Kommentar */
) sind tabu. const
steht immer rechts von dem, zu dem es gehört. (int const
stattconst int
)- Templatetypparameter werden durch
typename
gekennzeichnet, nicht durchclass
. - Öffnende geschweifte Klammern stehen nicht auf einer eigenen Zeile, sondern am Zeilenende. Sie werden nicht durch Leerzeichen getrennt.
- Schließende Klammern stehen auf der gleichen Einrückungsebene, wie der Ausdruck der korrespondierenden öffnenden Klammer.
- Es wird maximal eine Anweisung (engl. statement) pro Zeile geschrieben.
- Wird eine einzelne Anweisung nach einem
if
usw. auf eine neue Zeile geschrieben, wird sie in einen Block gepackt, sonst nicht. - Lange Zeilen werden umgebrochen, wobei die umgebrochenen Zeilen um eine Ebene eingerückt sind.
- Funktionsaufrufe werden so umgebrochen, dass die runden Klammern wie Geschweifte und die einzelnen Parameter wie Anweisungen (jeder auf eine eigene Zeile) behandelt werden. Dies bedeutet insbesondere, dass die schließende Klammer auf der gleichen Einrückungsebene steht, wie der Funktionsaufruf.
- Mit Templateinstantiierungen wird analog zu Funktionsaufrufen verfahren.
- Mehrere Variablen werden nur dann gemeinsam deklariert, wenn sie einen identischen Typ haben. (
int a, *b;
ist verboten.) - Die Variablendefinition erfolgt so spät wie möglich.
- Klassen:
private
- undprotected
-Variablen enden auf einen Unterstrich.private
-Funktionen enden auf einen Unterstrich.private
,protected
,public
undfriend
stehen auf der gleichen Einrückungsebene wieclass
.
- Wenn im Fließtext über Funktionen (Methode, Operatoren in Funktionsschreibweise) gesprochen wird, wird dies mit leeren Klammern hinter dem Funktionsnamen angedeutet.
Speziell für Autoren
Bearbeiten- Die Vorlagen von C++-Programmierung/ Vorlagen sind zu verwenden.
- Die Vorlage „cpp“ für Fließtext-C++ wird mit einem kleinen „c“ am Anfang geschrieben. Dies ist weniger Tipparbeit und neue Autoren verwirrt eine unterschiedliche Verwendung möglicherweise.
#pragma once
wird in diesem Buch nicht verwendet, weil das nicht im Standard steht.- Quelltext-Blöcke sollten pro Zeile maximal 100 Zeichen umfassen.
- Einige Worte werden auf Englisch belassen. Die folgende Liste versucht alle aufzuführen. Bei umfangreichen Änderungen eines nicht-aufgeführten Wortes, ist vorweg beim Hauptautor (Benutzer:Prog) nachzufragen:
- Compiler (compilergeneriert, Compilierfehler, kompilieren oder übersetzen)
- Code (alternativ Quelltext)
- Bei Konsolenprogrammen wird am Ende nicht auf eine beliebige Taste gewartet;
std::cin.get();
oder garsystem("pause");
(Windows-spezifisch) werden nicht verwendet, weil das überflüssig ist:- Nach der Ausführung in der Konsole ist die Konsole sowieso noch offen; also ist das Arbeitsergebnis zu sehen.
- Bei der Ausführung aus der IDE heraus ist das Warten auf eine Taste Teil der Programmentwicklung und des Testens; also gehört diese Maßnahme nicht in das Programm, sondern zu den Einstellungen der IDE.