Detaillierte Erläuterung von Header -Dateien und Quelldateien in C ++
1. C ++ Compilation -Modus
Im Allgemeinen gibt es in einem C ++ - Programm nur zwei Arten von Dateien - .CPP -Datei und .h -Datei. Unter ihnen wird die .CPP -Datei als C ++ - Quelldatei bezeichnet und der Quellcode von C ++ wird darin platziert. Während die .h -Datei als C ++ - Header -Datei bezeichnet wird und der Quellcode von C ++ darin platziert wird.
Die C ++ - Sprache unterstützt "separate Zusammenstellung". Mit anderen Worten, der gesamte Inhalt eines Programms kann in verschiedene Teile unterteilt und in verschiedene .cpp -Dateien platziert werden. Die Dinge in der .cpp -Datei sind relativ unabhängig. Beim Kompilieren (kompilieren) müssen Sie nicht mit anderen Dateien kommunizieren. Sie müssen nur mit anderen Zieldateien verlinken, nachdem Sie sie in die Zieldatei zusammengestellt haben. Beispielsweise ist eine globale Funktion "void a () {}" in der Datei A.CPP definiert, und diese Funktion muss in der Datei B.CPP aufgerufen werden. Trotzdem müssen die Dateien A.CPP und B.CPP die Existenz des anderen nicht kennen, sondern können sie separat kompilieren. Nachdem Sie sie in die Zieldatei zusammengestellt haben, verlinken Sie sie und das gesamte Programm kann ausgeführt werden.
Wie wird das erreicht? Aus der Sicht des Schreibens von Programmen ist es sehr einfach. In der Datei B.CPP deklarieren Sie vor dem Aufruf der Funktion "void a ()" die Funktion "void a ();" Erste. Dies liegt daran, dass der Compiler beim Kompilieren von B.CPP eine Symboltabelle erzeugt. Symbole wie "void a ()", die nicht gesehen werden können, werden in dieser Tabelle gespeichert. Wenn der Compiler erneut verlinkt wird, sucht er nach der Definition dieses Symbols in anderen Objektdateien. Sobald das Programm gefunden wurde, kann das Programm reibungslos erstellt werden.
Beachten Sie, dass hier zwei Konzepte erwähnt werden, eine "Definition" und der andere "Deklaration". Einfach ausgedrückt, "Definition" bedeutet, ein Symbol vollständig und vollständig zu beschreiben: ob es sich um eine Variable oder eine Funktion handelt, welchen Typ es zurückgibt, welche Parameter es benötigt usw. Ich werde es zuerst benutzen. Wenn Sie verlinken, gehen Sie zu einem anderen Ort, um herauszufinden, was es ist. Beim Definieren müssen Sie ein Symbol (Variable oder Funktion) entsprechend der C ++ - Syntax vollständig definieren, und beim Deklarieren müssen Sie nur den Prototyp dieses Symbols schreiben. Es ist zu beachten, dass ein Symbol im gesamten Programm mehrmals deklariert werden kann, aber nur einmal definiert werden muss. Stellen Sie sich vor, wenn es zwei verschiedene Definitionen eines Symbols gibt, wen sollte der Compiler dann zuhören?
Dieser Mechanismus bringt C ++ - Programmierern viele Vorteile und führt auch zu einer Methode zum Schreiben von Programmen. Bedenken Sie, dass wenn es eine sehr häufig verwendete Funktion "void f () {}" gibt, die in vielen .cpp -Dateien im gesamten Programm aufgerufen wird, müssen wir diese Funktion nur in einer Datei definieren und diese Funktion in anderen Dateien deklarieren. Eine Funktion ist leicht zu handhaben und bedeutet nur einen Satz, um ihn zu deklarieren. Was ist jedoch, wenn es zu viele Funktionen gibt, wie z. B. ein paar mathematische Funktionen, Hunderte von ihnen? Kann jeder Programmierer sicher sein, alle Funktionen genau aufzuschreiben und aufzuschreiben?
2. Was ist eine Header -Datei?
Offensichtlich ist die Antwort unmöglich. Es gibt jedoch eine sehr einfache Möglichkeit, den Programmierern zu helfen, sich die Mühe zu bewahren, so viele Funktionsprototypen zu erinnern: Wir können zuerst alle Deklarationsanweisungen von Hunderten von Funktionen schreiben und in eine Datei einfügen. Wenn der Programmierer sie braucht, kopieren Sie all diese Dinge in seinen Quellcode.