Wo sollte ich beim Codieren in C oder C ++ die haben #include
?
callback.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
callback.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 oder in beiden enthalten sein, wie ich es hier getan habe?
Antworten:
Geben Sie so viel wie möglich in die
.c
und so wenig wie möglich in die.h
. Die Includes in the.c
sind nur enthalten, wenn diese eine Datei kompiliert wird, aber die Includes für die.h
müssen von jeder Datei enthalten sein, die sie verwendet.quelle
#ifndef _CALLBACK_H_
den Compiler nicht daran, es mehr als einmal zu verarbeiten?.h
besteht, in einigen Fällen einen Fehler aufgrund einer Einschlussschleife zu vermeiden. Beispiel: Zwei Klassen benötigen einander für ihre Implementierungen, aber nicht für ihre Deklarationen. Wenn Sie beide Includes in das.cpp
s einfügen, wird ein Fehler vermieden.Sie sollten einen Header nur dann in eine andere .h-Datei aufnehmen, wenn Sie auf eine Typdefinition in diesem Header zugreifen müssen. beispielsweise:
Wenn Header A von Header B abhängt, wie im obigen Beispiel, sollte Header A Header B direkt enthalten. Versuchen Sie NICHT , Ihre Includes in der .c-Datei zu ordnen, um Abhängigkeiten zu erfüllen (dh einschließlich Header B vor Header A). Das ist ein großer Haufen Sodbrennen, der darauf wartet, passiert zu werden. Ich meine es so. Ich war schon mehrere Male in diesem Film und er endete immer mit Tokio in Flammen.
Ja, dies kann dazu führen, dass Dateien mehrmals eingeschlossen werden. Wenn jedoch geeignete Include-Schutzvorrichtungen zum Schutz vor mehreren Deklarations- / Definitionsfehlern eingerichtet sind, sollten Sie sich keine Gedanken über einige zusätzliche Sekunden Erstellungszeit machen. Der Versuch, Abhängigkeiten manuell zu verwalten, ist eine Qual.
Natürlich sollten Sie keine Dateien einfügen, die Sie nicht benötigen .
quelle
Fügen Sie so viele Includes wie möglich in Ihre CPP ein und nur diejenigen, die von der HPP-Datei in der HPP benötigt werden. Ich glaube, dies wird dazu beitragen, die Kompilierung zu beschleunigen, da HPP-Dateien weniger referenziert werden.
Erwägen Sie auch die Verwendung von Forward-Deklarationen in Ihrer HPP-Datei, um die Include-Abhängigkeitskette weiter zu reduzieren.
quelle
Wenn
#include <callback.h>
ja, möchte ich nicht#include
viele andere Header-Dateien benötigen , um meinen Code kompilieren zu können. Incallback.h
sollten Sie alles enthalten, was zum Kompilieren erforderlich ist. Aber nichts weiter.Überlegen Sie, ob mit Vorwärtsdeklarationen in Ihrer Header - Datei (wie
class GtkButton;
genügt), so dass Sie die Anzahl der reduzieren#include
Richtlinien im Header (und wiederum meine Kompilierung und Komplexität).quelle