Partenaires

CNRS IN2P3
UPMC
UPD
UPMC


Rechercher

Sur ce site

Sur le Web du CNRS


Accueil du site > Le LPNHE > Pages du personnel > Beau Tristan > Divers > Vielleries > variables globales (extern) et commandes du préprocesseur

variables globales (extern) et commandes du préprocesseur

4 octobre 2006

par Tristan Beau - 7 juin

On recommande souvent de ne pas utiliser de variables globales en C (dans les autres langages non plus) ; il est en effet préférable de s’en abstenir le plus souvent. Cependant, notamment lors d’une programmation utilisant de la mémoire partagée entre processus, ou bien des threads, on est souvent amené à utiliser ce mécanisme.

Si le projet contient plusieurs fichiers sources, l’un d’eux doit définir une variable qui deviendra globale (e.g. int x), tandis que les autres la référenceront via le mot clef extern. Or il est assez pénible de devoir expliciter ces variables externes dans tous les fichiers sources.

Pour optimiser la syntaxe, nous proposons ici de créer un fichier include assurant la correcte définition de telles variables. Appelons ext_var.h un tel fichier. Il contiendra :

Il suffit ensuite dans une des sources de définir la variable _MAIN_ (e.g. dans le main()justement), et d’inclure dans tous les fichiers sources ce ext_var.h. Par exemple, si notre projet contient ext_var.h, ext_main.c, ext_fct1.c, ext_fct2.c et ext_fcts.h, nous aurons :

  • dans ext_main.c
  • dans ext_fcts.h
  • dans ext_fct1.c
  • dans ext_fct2.c

Si nous souhaitons directement initialiser la variable x, on pourra modifier ainsi ext_var.h :

Facebook