PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C/C++ Header-Reihenfolge


mekakic
2011-10-04, 13:55:24
Ich habe mich schon häufig gefragt, ob es irgendeine Reihenfolge gibt wie man in C++ die Header sortieren sollte. Häufig funktionieren viele Reihenfolgen aber macht irgendwas weniger Probleme?

Ich nutze gerne Forward Declaration um meiner Header nicht mit unzähligen Header zu kaskadieren. Aber wenn das nicht geht? Und als Reihenfolge beginnend mit der logischen Entfernung Top-Down oder Bottom-Up?

Also z:B. mit diesen Klassen von Headern:

[Precomiled Header / stdafx.h]
[this-Header]
[Klassen-Header der gleichen Komponente]
[andere Komponenten-Header]
[Fremd Systeme/Middleware-Header]
[STL-Header]

Tiamat
2011-10-14, 00:23:31
ich denke doch mal, dass die includes so überprüft werden, wie die Reihenfolge des Codes beim kompilieren. Wenn ich raten müsste, würde beim Suchen eines Headers dann von oben nach unten abgearbeitet werden, aber das ist nur ne Vermutung.

GMP
2011-10-14, 09:28:34
Ich denke das kannst du machen wie du willst so lange du immer deiner Konvention folgst. Eventuelle Abhängigkeiten der Header untereinander müssten natürlich trotzdem beachtet werden. Auf die Schnelle hab ich nur den Google C++ Styleguide gefunden da steht unter http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Names_and_Order_of_Includes

"In dir/foo.cc or dir/foo_test.cc, whose main purpose is to implement or test the stuff in dir2/foo2.h, order your includes as follows:


dir2/foo2.h (preferred location — see details below).
C system files.
C++ system files.
Other libraries' .h files.
Your project's .h files.
"

Gast
2011-10-14, 23:40:23
Wenn ich raten müsste, würde beim Suchen eines Headers dann von oben nach unten abgearbeitet werden, aber das ist nur ne Vermutung.Die Präprozessordirektive #include führt einfach nur dazu, dass die entsprechende Datei (also dein Header) dort hinkopiert wird, wo das #include steht. Der Compiler sieht letztendlich nichts anderes als hättest du den Header per Hand dort hinkopiert.

Ectoplasma
2011-10-15, 09:43:08
Die Reihenfolge ist egal. Sie "muss" sogar egal sein. Wenn beim Ändern der Include-Reihenfolge, der Code nicht mehr kompiliert, ist auf jeden Fall in den Headern etwas falsch.

Tiamat
2011-10-15, 12:54:25
@Gast stimmt!

@Ts
Forward-Declarations sind ja auch richtig, nur muss dann in der .cpp dann includiert werden.
Aber da erzähl ich dir sicher nix neues.

Welches Problem hattest du jetzt genau ??