Ich habe einen Streit mit einem meiner Kollegen bezüglich der zu befolgenden C ++ - Richtlinien.
Derzeit gestaltet er alle seine Bibliotheken folgendermaßen:
- Er verwendet in seinen Dateinamen uneinheitlich Groß- und Kleinbuchstaben
- Einige seiner Header haben keine Erweiterung
Ich glaube, dass keine Erweiterung für C ++ - Standarddateien reserviert ist und dass die Verwendung von Großbuchstaben fehleranfällig ist (insbesondere, wenn Sie mit Code arbeiten, der sowohl unter Windows als auch unter Linux funktionieren soll).
Sein Punkt ist, dass er Qt
Konventionen befolgt (auch für Code, der kein Qt verwendet) und immer wieder sagt: "Wenn Qt es so macht, kann es nicht schlecht sein."
Jetzt versuche ich offen zu bleiben, aber ich fühle mich wirklich schlecht, wenn ich an / mit seinen Bibliotheken arbeiten muss. Gibt es diesbezüglich ein gemeinsames Regelwerk? Erzählt der Standard etwas darüber?
Vielen Dank.
#define signal
……… ("Wenn Qt es so macht, kann es nicht schlecht sein.") - Ich kann nicht sagen, dass ich persönlich mit all ihren Designentscheidungen einverstanden bin.Qt
. Ich denke sogar, dass es eine erstaunliche Bibliothek ist, aber einige ihrer Designentscheidungen fühlen sich für mich wirklich falsch an._
populärem, weit verbreitetem Code beginnen, aber es ist definitiv gegen den Standard.*.hpp
für einen C ++ - Header und alle meine Tools "bekommen es".Antworten:
Die Erweiterung (oder das Fehlen von) wird, soweit ich weiß, keine Probleme verursachen. Ich würde sagen, dass das Löschen der Erweiterung insgesamt unpraktisch ist, da es schwierig ist, Header-Dateien zu durchsuchen (zum Beispiel mit den Platzhaltern * .h und * .hpp) und es schwieriger macht, den Inhalt einer Datei zu identifizieren (zum Beispiel wenn Ihr Editor verlässt sich auf die Erweiterung, um den richtigen Syntaxhervorhebungsmodus auszuwählen.
Aus Code-Sicht macht es keinen großen Unterschied, auch das Gehäuse ist nicht problematisch, solange Sie überall einen konsistenten Fall verwenden und sich nicht nur auf Fallunterschiede verlassen, um Dateien zu unterscheiden. Aus praktischen Gründen ist es einfacher, sich an Kleinbuchstaben zu halten und eine Erweiterung (entweder .h oder .hpp) zu haben.
Wichtiger ist jedoch, dass Sie eine Konvention für Ihr gesamtes Entwicklungsteam auswählen und diese einhalten . Es ist weitaus schlimmer, nachschlagen zu müssen, wie eine Datei eingeschlossen, benannt und welche Erweiterung verwendet wird, wenn Sie etwas einschließen möchten - all dies sollte "erraten" sein, wenn Sie wissen, was Sie verwenden möchten.
quelle
Es gibt keine Regel (im Standard), dass nur Standard-Header-Dateien ohne Erweiterung sein dürfen. Der Dateiname kann so ziemlich alles sein, was Sie wollen. Allgemeine bewährte Verfahren legen jedoch Folgendes nahe:
Keine Dateien dürfen jemals ohne Erweiterung sein, und
Unterschiedliche Dateitypen haben unterschiedliche Erweiterungen. Insbesondere verwenden C ++ - Header eine andere Erweiterung (
.hpp
oder.hh
) als Header, die für einen C-Compiler akzeptabel sind.(Leider wird die zweite Regel häufig verletzt, und man sieht häufig C ++ - Header-Dateien mit
.h
. Aus persönlicher Erfahrung kann ich versichern, dass dies später zu Wartungsproblemen führen wird, aber dies ist gängige Praxis.)In Bezug auf den Fall ist äußerste Vorsicht geboten, da bei Dateinamen in einigen Systemen zwischen Groß- und Kleinschreibung unterschieden wird und in anderen nicht. Ich habe zwei verschiedene Regeln gesehen, die funktionieren: Entweder alles in Kleinbuchstaben im Dateinamen oder der Dateiname folgt genau den gleichen Regeln in Bezug auf die Groß- und Kleinschreibung wie für Symbole in C ++.
In beiden Fällen legen Sie im Konsens Regeln für das Projekt fest, die von allen befolgt werden.
quelle
Ja. Ja, das kann es wirklich. Ihr Bibliotheksdesign lautet "Wir wollen unbedingt Java sein". Es ist ein totales Durcheinander. Die Standardbibliothek ist viel besser.
Grundsätzlich ist es auch ein logischer Irrtum. Das Design von Qt ist nur dann eine Nachahmung wert, wenn Sie logische Argumente dafür liefern können, warum es gut ist. Es ist nicht gut, nur weil es Qt ist.
quelle
Wie ich weiß, wären seit dem Standard von 1998 nur Standard-Bibliotheksheader ohne die .h. Daher werden nicht standardmäßige C ++ - Headerdateien herkömmlicherweise immer noch mit .h geschrieben. Aber denken Sie daran, dass es sich um eine Konvention handelt. Sie können keine Erweiterung oder sogar .txt-Erweiterung verwenden. Es ist, als würden Sie Ihre Klassen mit Kleinbuchstaben schreiben. Es funktioniert immer noch, aber es ist nicht die Konvention.
quelle
Dies sind Konventionen, keine Regeln. Es gibt keine Einschränkung, Konventionen einzuhalten, aber Konventionen erleichtern das Leben, wenn Sie als Referenz vorbeikommen.
Gemäß den Erweiterungen (.h, .hpp) müssen die in c ++ enthaltenen Dateien keine Erweiterungen haben. Sie müssen die Erweiterungen verwenden, wenn Sie Header von anderen als c ++ verwenden, z. B. c-Bibliotheken oder Boost-Bibliotheken.
quelle