Bonjour
Je développe un code en C, qui comporte déjà plusieurs fichiers source. Afin d'en faire le code le plus pro possible, j'essaie de respecter au maximum les recommandation de codage.
Ayant plusieurs variables globales, voici mon problème :
Pour l'instant, je fais la déclaration de définition dans un fichier en-tête Entete.h qui est inlut dans tous mes fichiers **.c.
Or, j'ai lu sur plusieurs sites que cette pratique est déconseillée car elle mène à des inclusions multiples si le fichier est inclu plusieurs fois (ce qui est le cas dans mon code, ou Entete.h est inclus dans chacun de mes fichiers **.c). mon code est donc de ce type :
fichier aux.c :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 #include <stdio.h> #include <math.h> #include "Entete.h" /******************************************************************************* * MAIN ******************************************************************************/ int main(void) { void f1( void ); t=0; dt=0.1; f1(); printf("%f",t); return 0; }
fichier Entete.h :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 #include "Entete.h" void f1( void ) { t+=dt; return; }
Concrètement, quel est le problème qui peut se poser ? Car ma compilation ne donne aucune erreur et que le code s'éxécute normalement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 double t; double dt;
J'ai lu par ailleurs que pour éviter les inclusions multiples, les fichiers en tête devaient être protégés par des macros comme ceci :
Cela est-il suffisant ? J'ai lu aussi qu'il fallait mieux, pour être sûr de ne faire les déclarations de définitions qu'une seule fois, de faire celles-ci dans un fichier **.c et de mettre dans le header la déclaration de référence (du style "externe double t") qui sera rappellée dans le nombre de fichier nécessaire au travers de l'"include".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 #ifndef H_ENTETE_H #define H_ENTETE_H double t; double dt; #endif
(cela donnerait le code suivant :
main.c :
fichier aux.c :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 #include <stdio.h> #include <math.h> #include "Entete.h" int t; int dt; /******************************************************************************* * MAIN ******************************************************************************/ int main(void) { void f1( void ); t=0; dt=0.1; f1(); printf("%f",t); return 0; }
[/CODE]
fichier aux.c :
fichier entête :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 #include "Entete.h" void f1( void ) { t+=dt; return; }
)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 #ifndef H_ENTETE_H #define H_ENTETE_H extern double t; extern double dt; endif
Quelle est la différence entre ces deux méthodes ? Laquelle est nécessaire ? Les deux ?
Merci à toutes les bonnes volontés, car je suis malgré tout bien embrouillée
L.
Partager