variables globales

variables globales - C - Programmation

Marsh Posté le 27-02-2018 à 18:19:24    

 
 
Bonjour,
 
Apparemment les variables globales sont à éviter autant que possible. Alors pourquoi l'existence de telles variables si l'on doit et peut s'en passer? Y a-t'il des situations ou elles sont quand meme utiles?

Reply

Marsh Posté le 27-02-2018 à 18:19:24   

Reply

Marsh Posté le 27-02-2018 à 18:47:48    

bonux7 a écrit :

Apparemment les variables globales sont à éviter autant que possible.

Il faut effectiver faire gaffe, on a vite fait de créer du code illisible et qui peut contenir des bugs difficiles à trouver.

Citation :

Alors pourquoi l'existence de telles variables si l'on doit et peut s'en passer? Y a-t'il des situations ou elles sont quand meme utiles?

Il y a bien sûr des situations, p.ex. si on a un espace mémoire auquel pleines de fonctions doivent accéder, passer toujours un pointer en paramètre peut vite devenir lourd. Ou si on travaille avec des fonctions callback pour lesquelles on ne choisit pas les arguments ou encore pour les interruptions.

Reply

Marsh Posté le 27-02-2018 à 19:21:32    

Merci de ta réponse. Je n'ai pas vu encore les callback et la gestion des interruptions (je suis en L1), mais déjà celà m'aide à anticiper sur la suite.

Reply

Marsh Posté le 27-02-2018 à 19:26:00    

Les interruptions c'est pour des microcontrôleurs et autres systèmes embarqués, sur un PC tu vas pas y toucher à moins d'écrire un système d'exploitation. Les callback par contre c'est assez courant.

Reply

Marsh Posté le 27-02-2018 à 20:57:09    

ok dac. je prend note :)

Reply

Marsh Posté le 31-03-2018 à 15:53:43    

un compromis est de limiter la visibilité de la globale au fichier (plus précisément l'unité de compilation) ou elle est déclarée.

 

C'est faisable grâce au qualificateur "static".

 


fichier_avec_globale_locale.c

Code :
  1. static bool bLocGlobale = FALSE; // bLocGlobale ne sera accessible directement que dans ce fichier
  2. bool* pbGetLocGlobale(void)
  3. {
  4.   return &bLocGlobale; // retourne l'addresse de bLocGlobale
  5. }
  6. void manipulerGlobale1(void)
  7. {
  8.   bLocGlobale = ... // OK
  9. }
  10. void manipulerGlobale2(void)
  11. {
  12.   bLocGlobale = ... // OK
  13. }
 

fichier_qui_veux_manipuler_la_globale.c

Code :
  1. #include "fichier_avec_globale_locale.h"
  2. void manipulerGlobaleAutreModule(void)
  3. {
  4.   bool* pbGlobaleAutreModule = pbGetLocGlobale();
  5.   *pbGlobaleAutreModule = ... // OK
  6.   bLocGlobale = ... // donnera une erreur de compilation
  7. }


Message édité par Ivanovitch le 31-03-2018 à 15:58:42
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed