IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Les globales c'est le mal .. oui mais pourquoi?


Sujet :

C

  1. #1
    Membre éclairé Avatar de sloshy
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2005
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 728
    Points : 723
    Points
    723
    Par défaut Les globales c'est le mal .. oui mais pourquoi?
    Hello,
    Je pense que tout est dans le titre,
    On nous dit toujours que les variables globales c'est coder comme un porc, mais pourquoi?
    Oui on peut se "tromper" et nommer deux variables avec le meme noms et si l'une est global alors caca sauf que le compilateur nous criera garde non? de plus si on prend comme norme de prefixer toutes ses globales par g_ par exemple le problemes est restreint.

    De plus niveau perf, les globales sont plutot un atout qu'autre chose.
    Certes je dis pas que toutes les variables devrait etre globale loins de la, mais j'aimerai savoir quels sont ses effets nefaste cache que je ne semble pas comprendre.

  2. #2
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 729
    Points
    1 729
    Par défaut
    Salut,

    C'est génant car tu sais pas qu'est ce qui peut la modifier. Utiliser plutot une structure passée en paramètre de chaque fonction
    Voir discussion ici
    http://www.developpez.net/forums/d69...bal-parametre/

    Edit : aussi, si il y a des traitements d'initialisation et de liberation à faire, tu ne controles pas quand il sont faits

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par sloshy Voir le message
    Oui on peut se "tromper" et nommer deux variables avec le meme noms et si l'une est global alors caca sauf que le compilateur nous criera garde non? de plus si on prend comme norme de prefixer toutes ses globales par g_ par exemple le problemes est restreint.
    ...
    Certes je dis pas que toutes les variables devrait etre globale loins de la, mais j'aimerai savoir quels sont ses effets nefaste cache que je ne semble pas comprendre.

    • Avoir une variable globale externe (non statique) la rend accessible de l'extérieur. Et donc modifiable... (pas seulement par toi) d'où danger violent...

    • Avoir une variable globale interne (statique) va à l'encontre même d'une programmation structurée, où une fonction est décrite en fonction de ses entrées et de ses sorties. Et si de plus cette fonction doit être appellée par un module extérieur (comme c'est le cas dans les bibliothèques) cela s'appelle "se tirer dans le pied".


    Alors à part quelques cas très particuliers où on a intérêt dans UN module (variable statique), la plupart du temps ce choix est formellement déconseillé.

  4. #4
    Membre éclairé Avatar de sloshy
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2005
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 728
    Points : 723
    Points
    723
    Par défaut
    Bonjour,
    Le contexte des thread est particulier, et gérable même avec une globale.
    Comment puis-je utiliser de manière simple un tableau de pointeur sur fonction?
    Lors d'allocation dymanique par exemple, il est assez lourd dans le code de ne pas passer par une globale. (et niveau pef du code, la globale l'emporte).

    Je ne dis pas que je suis pro globale, loin de la, je pense juste que si elles ont été crée c'est qu'il y avait une demande utile.
    PS: quelqu'un pour m'expliquer en deux mots la re entrence? (oui je sais google est mon ami et j'y vais de ce pas.)

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 578
    Points
    41 578
    Par défaut
    Pour ce qui est des globales, je pense qu'on peut faire une distinction entre globales constantes, initialisées une fois pour toutes (de préférence statiquement, avant même que l'exécution commence), et globales pouvant être modifiées.

    Pour la réentrance: Un code comme ça ne marchera pas, par exemple:
    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
    21
    22
    23
    int main(void)
    {
    	fgets( une_string )
    	for(token = strtok(une_string, ";") ; token!=NULL ; token=strtok(NULL, ";"))
    	{
    		lire_fichier(token);
    	}
    	return 0;
    }
     
    void lire_fichier(nomfich)
    {
    	fopen(nomfich)
    	{
    		while(fgets(une_ligne, fichier))
    		{
    			for(monToken = strtok(une_ligne, " ") ; monToken!=NULL ; monToken = strtok(NULL, " ")
    			{
    				faire_un_truc();
    			}
    		}
    	}
    }
    À cause du fait que strtok() conserve une variable globale, on ne peut faire qu'une seule analyse à la fois.
    En utilisant à la place la fonction POSIX strtok_r(), on n'a pas ce problème si on utilise des variables locales.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Des Google Glass, oui mais pourquoi ?
    Par Stéphane le calme dans le forum Actualités
    Réponses: 48
    Dernier message: 28/07/2017, 11h09
  2. Bac + 5 … oui mais pourquoi ? des réponses
    Par Merfolk dans le forum Etudes
    Réponses: 38
    Dernier message: 31/12/2008, 02h02
  3. id 1221 ; oui mais pourquoi ?
    Par olivanto dans le forum Exchange Server
    Réponses: 10
    Dernier message: 17/10/2008, 14h31
  4. Des fibres ? Oui, mais pourquoi faire ?
    Par mchk0123 dans le forum Windows
    Réponses: 2
    Dernier message: 01/05/2007, 21h05
  5. Une erreur sur le free.. Oui mais pourquoi ?
    Par MonsieurAk dans le forum C
    Réponses: 7
    Dernier message: 22/12/2005, 20h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo