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 :

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 aux.c :
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;
}
fichier Entete.h :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
double t;
double dt;
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.

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 :


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 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".

(cela donnerait le code suivant :

main.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;
}
fichier aux.c :

[/CODE]

fichier aux.c :
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;
}
fichier entête :

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.