si dans votre projet vous avez plusieurs fichier, les #include vous les mettez dans les fichiers .c ou .h parce que je vois plein de projet d'autre gens sur github qui mettent dans .h alors que m@teo21 dans son tuto mets dans .c
Par exemple des #include qui déclare des fonctions seront souvent utile dans des .c et des #include qui déclare des types seront souvent utile dans des .h
Un ficher entête.h c'est fait pour être utiliser dans plusieurs fichiers.c, sinon il n'est pas utile.
Les autres fichier .c n'en on rien à faire des includes qui ne leur sont pas destiné. Et puis si tu mets tout les includes nécessaire à tout les fichier.c qui vont l'utiliser, il va être charger (d'include).
Donc la bonne résolution, c'est de les mettre la où il y en a besoin, pas plus.
La raison exacte c'est que ça fait perdre du temps d'inclure tout dans tous les *.h. Connais tu la façon dont on compile un projet contenant plusieurs fichier ?
Globalement on va compiler tous les .c vers des .o et ensuite tu lis tout ça ensemble. Quand tu recompile, tu ne va recompiler que les fichiers qui vont avoir changés ou qui incluent des fichier qui ont changés.
Dans le cas ou tu inclus dans les sources, ton nombre de ficher à recompiler va se limiter au minimum,
Dans le cas ou tu inclus dans les headers, tu vas devoir recompiler tous les fichiers qui vont inclure ce header, et par jeux de ricochet, tous les sources qui incluent des headers qui incluent ton header… bref ça peut aller très vite.
Imaginons :imaginons trois fichiers source et deux headers :
main.c inclue headers1.h
source1.c inclue header1.h
header1.h include header2.h
source2.c inclue header2.h
Dans une configuration comme celle ci ton système doit recompiler les trois fichiers source si tu modifier quelque chose dans header2.h
Alors que si tu fais logiquement:
main.c inclue headers1.h
source1.c inclue header1.h
source1.c include header2.h
source2.c inclue header2.h
Dans cette configuration tu n'auras que source1 et source2 à recompiler, sur cet exemple nous n'avons que trois fichiers source donc le gains est limité, mais dans un projet à 150 fichier C, ça peut vite être important.
Si tu veux comprendre comment parmeche la compilation regarde un tuto sur les makefiles, ça pourra t'intéresser
La conclusion est la même que celle de @rouloude : Donc la bonne résolution, c'est de les mettre la où il y en a besoin, pas plus.
- Edité par ox223252 7 juin 2019 à 8:07:15
la connaissance est une chose qui ne nous appauvrit pas quand on la partage.
donc si par exemple j'inclue sdl/sdl.h dans mon programme, comme string.h est inclu dans sdl/sdl.h, je n'inclu pas string.h ? meme si j'utilise strcmp, strcpy, strcat, etc ?
Si SDL.h inclus string.h, c'est pour sa pomme. Si tu as besoin de string.h dans TON code alors tu l'inclus. Les fichiers.h sont normalement faits de telle sorte que la double inclusion n'est pas possible. Ne serait-ce que parce que si tu te rends compte que tu n'as plus besoin de SDL.h, il va te manquer le string.h et que tu n'es pas (obligatoirement) censé savoir ce que les autres fichiers incluent ou pas.
C'est plutôt simple :
Pour un fichier.h, si une déclaration de fonction ou de type fait allusion à un type déclaré dans toto.h, on inclus toto.h.
Pour un fichier c, si on appelle une fonction déclarée dans toto.h, on inclus toto.h, si on déclare une variable d'un type déclaré dans tata.h, on inclus tata.h même si toto.h inclus lui-même tata.h.
d'accord, donc toi tu dis plutot d'inclure a chaque fois qu'on fait appelle a une fonction exterieur, meme si on inclu un fichier qui lui meme inclu un autre fichier ?
j'ai un fichier toto.h avec dedans les fonctions A et B, donc dans le fichier toto.c j'inclu A
j'ai un fichier titi.h avec une fonction C et une structure S. la fonction A de toto.h utilise S donc il faut que j'inclu titi.h dans toto.h
et si le fichier titi.c utilise la fonction A, j'inclu toto.h dans titi.c pour le prototype de A, mais est-ce que j'inclu titi.h dans titi.c sachant que je l'ai déjà inclu dans toto.h ?
si j'ai bien compris, drx dit que oui alors que plus haut ils disaient que non.
Quand un fichier source foo.c fait l'inclusion de l'entête foo.h des fonctions qu'il définit, le compilateur va vérifier que les déclarations (dans le .h) sont cohérentes avec les définitions (dans le .c).
Donc une bonne pratique est de faire cette inclusion systématiquement, et de ne pas compter sur des inclusions indirectes, qui ne font rien gagner, par flemme de taper une ligne.
Faut rester simple : en principe on fait un #include pour
le fichier d'entête correspondant au source
les fichiers d'entête des trucs qu'on importe
Les tentatives de faire le malin, que ce soit par les inclusions indirectes ou le coup du fichier d'entete fourre-tout, ça finit toujours mal, sur le long terme.
Si il ne lisait pas toutes les lignes, comment trouverait il le #endif ?
Il n'est pas question de "sauter". Après avoir rencontré un #if dont la condition est fausse, le processeur continue à lire les lignes suivantes. Si ce sont des directives de processeur, il s'en occupe, sinon il ne produit rien en sortie.
- Edité par michelbillaud 9 juillet 2019 à 8:07:08
La variable v3 sera définie si A n'est pas définie, mais B peut être définie. Il faudrait le même test après le dernier #else pour couvrir tous les cas.
Le Tout est souvent plus grand que la somme de ses parties.
plusieurs fichier
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
la connaissance est une chose qui ne nous appauvrit pas quand on la partage.
Mon GitHub
Bonhomme !! | Jeu de plateforme : Prototype.
la connaissance est une chose qui ne nous appauvrit pas quand on la partage.
Mon GitHub
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.
la connaissance est une chose qui ne nous appauvrit pas quand on la partage.
Mon GitHub
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.
la connaissance est une chose qui ne nous appauvrit pas quand on la partage.
Mon GitHub
Le Tout est souvent plus grand que la somme de ses parties.