76 Stimmen

Sollte C++ Header-Dateien eliminieren?

Viele Sprachen wie Java, C# trennen Deklaration und Implementierung nicht. C# hat ein Konzept der teilweisen Klasse, aber Implementierung und Deklaration bleiben dennoch in der gleichen Datei.

Warum hat C++ nicht das gleiche Modell? Ist es praktischer, Kopfdateien zu haben?

Ich beziehe mich auf aktuelle und kommende Versionen des C++-Standards.

14 Stimmen

Ich glaube, es gibt keinen wirklichen Grund für Headerdateien in C++. Alle darin gespeicherten Informationen sind im .cpp dupliziert und können automatisch extrahiert werden (wie von www.lazycplusplus.com demonstriert - Haftungsausschluss: nicht verwendet). Das Problem ist die Kompilierungsgeschwindigkeit und C#&Java haben gezeigt, dass dies überwindbar ist.

0 Stimmen

Wie kann www.lazycplusplus.com alle Informationen erhalten? Was ist, wenn ich einen void-Pointer in der Header-Datei für zukünftige Verwendung deklarieren und reservieren wollte? Es wird nie in der cpp-Datei verwendet oder referenziert.

1 Stimmen

THanks.... Ich habe auch keine Ahnung, warum es abgelehnt wurde.

17voto

Abhay Punkte 6851

In The Design and Evolution of C++, gibt Stroustrup noch einen weiteren Grund...

Dieselbe Headerdatei kann zwei oder mehr Implementierungsdateien haben, die gleichzeitig von mehr als einem Programmierer bearbeitet werden können, ohne dass ein Quellcodeverwaltungssystem erforderlich ist.

Dies mag heutzutage seltsam erscheinen, aber ich denke, es war ein wichtiges Thema, als C++ erfunden wurde.

1 Stimmen

Auch mit einem Source-Control-System macht es die Arbeit an getrennten Dateien sicher einfacher, Zusammenführungen zu vereinfachen.

11 Stimmen

+1 für Die gleiche Headerdatei kann zwei oder mehr Implementierungsdateien haben. Das ist ein Segen für die Erstellung einer portablen Anwendung ohne den Missbrauch von #ifdef-fu. (Verwenden Sie einfach ein Makefile, das das richtige myclass.o aus den plattformabhängigen myclass-win.cpp / myclass-linux.cpp generiert, und der Rest kümmert sich nur um myclass.h)

0 Stimmen

Dies ist in der Tat seltsam und sollte heutzutage überhaupt nicht als Grund diskutiert werden. Es ist Geschichte.

14voto

Jeroen Dirks Punkte 7380

Wenn du C++ ohne Header-Dateien möchtest, habe ich gute Nachrichten für dich.

Es gibt es bereits und heißt D (http://www.digitalmars.com/d/index.html)

Technisch gesehen scheint D viel schöner zu sein als C++, aber es ist einfach noch nicht weit verbreitet genug, um in vielen Anwendungen verwendet zu werden.

2 Stimmen

Der Schlüsselpunkt bei D, unabhängig davon, ob Sie es verwenden oder nicht, ist, dass es den Großteil des Funktionsumfangs von C++ hat. Möglicherweise haben Sie argumentiert, dass C++ Headerdateien benötigt, weil Vorlagen sie benötigen oder weil Sie sie irgendwie benötigen, wenn effizienter Code gefragt ist. Beides wird durch die Existenz von D als falsch erwiesen.

0 Stimmen

C++ ist eine auf Systemebene arbeitende Sprache. D hingegen nicht.

0 Stimmen

Selbst wenn es die Frage nicht beantwortet, war dieser Kommentar wirklich hilfreich für mich.

8voto

Peter Punkte 1316

Eines der Ziele von C++ ist es, eine Obermenge von C zu sein, und es ist schwierig, dies zu erreichen, wenn es keine Header-Dateien unterstützen kann. Ein weiterer Punkt ist, dass wenn Sie Header-Dateien entfernen möchten, Sie genauso gut auch CPP (den Pre-Prozessor, nicht Plus-Plus) komplett entfernen könnten; sowohl C# als auch Java spezifizieren keine Makro-Präprozessoren in ihren Standards (aber es sollte angemerkt werden, dass sie in einigen Fällen sogar mit diesen Sprachen verwendet werden können).

Wie C++ derzeit entworfen ist, benötigen Sie Prototypen - genauso wie in C -, um jeglichen kompilierten Code zu prüfen, der auf externe Funktionen und Klassen verweist. Ohne Header-Dateien müssten Sie diese Klassendefinitionen und Funktionsdeklarationen manuell eingeben, bevor Sie diese verwenden können. Um auf Header-Dateien in C++ zu verzichten, müssten Sie eine Funktion in der Sprache hinzufügen, die etwas wie das import-Stichwort in Java unterstützen würde. Das wäre eine große Änderung; um Ihre Frage zu beantworten, ob dies praktikabel wäre: Ich denke nicht - überhaupt nicht.

8voto

Piotr Dobrogost Punkte 39650

Viele Menschen sind sich der Mängel von Headerdateien bewusst und es gibt Ideen, ein leistungsstärkeres Modulsystem in C++ einzuführen. Du solltest einen Blick auf Module in C++ (Revision 5) von Daveed Vandevoorde werfen.

1 Stimmen

Leider hat es nicht bis C++0x geschafft und wurde auf einen zukünftigen TR verschoben.

1voto

dsimcha Punkte 65784

Nun, C++ an sich sollte Headerdateien nicht eliminieren wegen der Abwärtskompatibilität. Allerdings halte ich sie insgesamt für eine dumme Idee. Wenn Sie eine Closed-Source-Bibliothek verteilen möchten, können diese Informationen automatisch extrahiert werden. Wenn Sie verstehen möchten, wie man eine Klasse verwendet, ohne sich die Implementierung anzusehen, dafür sind Dokumentationsgeneratoren da, und sie erledigen diese Aufgabe um einiges besser.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X