Wo sollte ich beim Codieren in C oder C++ die #include
‘s?
Rückruf.h:
#ifndef _CALLBACK_H_
#define _CALLBACK_H_
#include <sndfile.h>
#include "main.h"
void on_button_apply_clicked(GtkButton* button, struct user_data_s* data);
void on_button_cancel_clicked(GtkButton* button, struct user_data_s* data);
#endif
Rückruf.c:
#include <stdlib.h>
#include <math.h>
#include "config.h"
#include "callback.h"
#include "play.h"
void on_button_apply_clicked(GtkButton* button, struct user_data_s* data) {
gint page;
page = gtk_notebook_get_current_page(GTK_NOTEBOOK(data->notebook));
...
Sollten alle Includes entweder in .h oder .c / .cpp enthalten sein, oder in beiden, wie ich es hier getan habe?
Legen Sie so viel wie möglich in die .c
und so wenig wie möglich in der .h
. Die beinhaltet in der .c
werden nur eingeschlossen, wenn diese eine Datei kompiliert wird, aber die Includes für die .h
müssen in jeder Datei enthalten sein, die sie verwendet.
Sie sollten einen Header nur dann in eine andere .h-Datei einfügen, wenn Sie auf eine Typdefinition in diesem Header zugreifen müssen. zum Beispiel:
#ifndef MY_HEADER_H
#define MY_HEADER_H
#include <stdio.h>
void doStuffWith(FILE *f); // need the definition of FILE from stdio.h
#endif
Wenn Header A wie im obigen Beispiel von Header B abhängt, sollte Header A Header B direkt enthalten. Tun NICHT Versuchen Sie, Ihre Includes in der .c-Datei so anzuordnen, dass sie Abhängigkeiten erfüllen (dh Header B vor Header A einfügen); das ist ein großer alter Haufen Sodbrennen, der darauf wartet, passiert zu werden. Ich meine es so. Ich war mehrere Male in diesem Film und er endete immer damit, dass Tokio in Flammen aufging.
Ja, dies kann dazu führen, dass Dateien mehrmals eingebunden werden, aber wenn sie über ordnungsgemäße Include-Wächter verfügen, die zum Schutz vor mehreren Deklarations-/Definitionsfehlern eingerichtet sind, dann lohnt es sich nicht, sich über ein paar zusätzliche Sekunden Build-Zeit Sorgen zu machen. Der Versuch, Abhängigkeiten manuell zu verwalten, ist ein Ärgernis.
Natürlich sollten Sie keine Dateien einschließen, wo dies nicht der Fall ist brauchen zu.
Fügen Sie so viele Includes wie möglich in Ihre cpp ein und nur die, die von der hpp-Datei in der hpp benötigt werden. Ich glaube, dass dies dazu beitragen wird, die Kompilierung zu beschleunigen, da hpp-Dateien weniger Querverweise aufweisen.
Erwägen Sie auch die Verwendung Erklärungen weiterleiten in Ihrer hpp-Datei, um die Include-Abhängigkeitskette weiter zu reduzieren.
Wenn ich #include <callback.h>
ich will nicht müssen #include
viele andere Header-Dateien, um meinen Code zum Kompilieren zu bringen. Im callback.h
Sie sollten alles enthalten, was zum Kompilieren benötigt wird. Aber nichts weiter.
Überlegen Sie, ob Sie Forward-Deklarationen in Ihrer Header-Datei verwenden (z class GtkButton;
) ausreichen, sodass Sie die Anzahl reduzieren können #include
Direktiven im Header (und damit meine Kompilierzeit und Komplexität).
Kann man dann nicht einfach eine All.h in das Projekt einbauen, die alle benötigten Header enthält, und jede andere .h-Datei ruft All.h auf und jede .c/.cpp-Datei enthält nur ihren eigenen Header?
14238600cookie-check#einschließen in .h oder .c / .cpp?yes
Lassen Sie mich das umdrehen und fragen: was war dein Kriterien für die Entscheidung, sndfile.h und main.h in callback.h einzufügen?
– Owen S.
8. Juni 2010 um 23:38 Uhr
für alle anderen, die an mehr Details interessiert sind, gibt es Dies.
– Diego Rodríguez
29. März 2021 um 21:04 Uhr