9.6.2 Les variables globales

Les variables globales sont à utiliser de façon exceptionnelle : sauf exception particulière (indiquée cidessous), on peut toujours s'en passer.
Une variable devient globale dès qu’elle est définie en dehors de toute fonction, en général au début du fichier. Elle est utilisable par toutes les fonctions du fichier. Elle existe pendant toute la durée du programme. Son emplacement mémoire est connu dès l'édition de liens (juste après la compilation).
Une variable globale est une variable "publique" utilisable par tout le monde. Cette apparente simplicité est trompeuse : le programme est beaucoup plus difficile à lire, on ignore tout du passé et de l'avenir de la variable si on n'épluche pas tout le programme (aucune traçabilité), et la programmation à plusieurs devient risquée, car des variables globales et locales peuvent porter par erreur le même nom Les variables globales ne sont globales que dans la partie du fichier qui suit leur définition. Elles doivent être placées en tête du fichier pour la lisibilité. En compilation séparée, il est conseillé de placer la définition des variables globales au sommet du fichier du main ; elles sont alors simples à trouver. Insistons : évitez les variables globales. Nous verrons dans le chapitre sur les pointeurs que le passage par adresse des paramètres permet d'éviter l'utilisation de variables globales dans la quasi‐totalité des cas.
De façon général, dès que le passage en paramètre n’est pas possible. C’est le cas de toutes les fonctions qui ont un prototype figé : faute de pouvoir disposer de paramètres pour dialoguer avec elles, il faut utiliser des variables globales qui matérialisent des données ou des flags (drapeaux de signalisation). Exemples :
– en programmation Windows, pour échanger des données entre fonctions Callback ou Threads. Exceptionnellement, dans un programme qui utilise tout le temps une « grosse » variable « centrale » (toujours un tableau ou une structure), on peut tolérer de rendre cette variable globale.
![]()
|