Lorsque vous codez en C ou C ++, où devrais-je avoir le #include
?
callback.h:
#ifndef _CALLBACK_H_ #define _CALLBACK_H_ #include #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 #include #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)); ...
Est-ce que tout devrait être dans le .h ou le .c / .cpp, ou les deux comme je l’ai fait ici?
Mettez autant que vous le pouvez dans le .c
et aussi peu que possible dans le .h
. Les inclusions dans le fichier .c
ne sont inclus que lorsque ce fichier est compilé, mais les inclusions pour le fichier .h
doivent être inclus dans chaque fichier qui l’utilise.
La seule fois où vous devez inclure un en-tête dans un autre fichier .h, c’est si vous devez accéder à une définition de type dans cet en-tête; par exemple:
#ifndef MY_HEADER_H #define MY_HEADER_H #include void doStuffWith(FILE *f); // need the definition of FILE from stdio.h #endif
Si l’en-tête A dépend de l’en-tête B tel que l’exemple ci-dessus, l’en-tête A doit inclure l’en-tête B directement. N’essayez PAS d’ordonner votre include dans le fichier .c pour satisfaire les dépendances (c’est-à-dire, y compris l’en-tête B avant l’en-tête A); c’est une grosse stack de brûlures d’estomac qui arrive. Je suis sérieux. J’ai participé à plusieurs resockets à ce film, et Tokyo s’est toujours enflammé.
Oui, les fichiers peuvent être inclus plusieurs fois, mais s’ils sont correctement inclus, installez des gardes configurés pour vous protéger contre plusieurs erreurs de déclaration / définition. Essayer de gérer les dépendances manuellement est une douleur dans le cul.
Bien sûr, vous ne devriez pas inclure des fichiers dont vous n’avez pas besoin .
Mettez autant d’inclusions dans votre cpp que possible et seulement celles qui sont nécessaires au fichier hpp dans le fichier hpp. Je crois que cela aidera à accélérer la compilation, car les fichiers hpp seront moins référencés.
Pensez également à utiliser des déclarations avancées dans votre fichier hpp pour réduire davantage la chaîne de dépendance à l’inclusion.
Si je #include
, je ne veux pas avoir à #include
beaucoup d’autres fichiers d’en-tête pour comstackr mon code. Dans callback.h
vous devez inclure tout ce qui est nécessaire pour le comstackr. Mais rien de plus.
Déterminez si l’utilisation de déclarations avancées dans votre fichier d’en-tête (telle que la class GtkButton;
) suffira, ce qui vous permettra de réduire le nombre de directives #include
dans l’en-tête (et, par la suite, mon temps de compilation et sa complexité).