CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C] Variable globale.

ArgentComptant
ArgentComptant
Niveau 5
11 décembre 2011 à 17:37:52

Bonjour, alors voilà, j'ai fais un petit programme dans lequel j'utilise plusieurs variables globale. J'ai vu quelque part comme quoi il fallait les éviter le plus possible, et à la place utiliser des pointeur, et je voudrais bien savoir si c'est vrai et si oui pourquoi.

Désolé, c'est surement une question bête mais bon, je débute, merci d'avance de répondre.

Pocolo
Pocolo
Niveau 10
11 décembre 2011 à 17:59:16

C'est vrai qu'il faut éviter d'avoir trop de variables globales car un gros programme peut vite devenir confus comme cela, en revanche ce n'est pas des pointeurs qu'il faut utiliser à la place, cela n'a rien à voir, il faut juste préférablement utiliser des variables locales.

Une variable locale est par exemple une variable que tu déclares et définit à l'intérieur d'une fonction, cette variable ne peut-être utilisée qu'a l'intérieur de la fonction, après elle n'existe plus.

Ou autrement tu utilises des struct qui ont leur propres variables.

Pocolo
Pocolo
Niveau 10
11 décembre 2011 à 18:01:14

A noter qu'un pointeur est aussi une variable et un pointeur peut très bien être global aussi, c'est pour cela que ça n'a aucune rapport.

ArgentComptant
ArgentComptant
Niveau 5
11 décembre 2011 à 18:06:02

Ah d'accord, en fait le truc c'est que j'ai un peu plus d'une vingtaine de variable globale, et qu'elle sont toutes utilisé/modifié par plusieurs fonction, donc si je les laisse c'est pas vraiment dérangeant, a part pour la lecture donc ?

Pocolo
Pocolo
Niveau 10
11 décembre 2011 à 18:14:06

Le pire c'est d'avoir des variables globales avec des petits noms comme x ou i car il peut y avoir des conflits avec des variables locales par exemple.

Mais généralement un programme bien conçu ne devrait pas contenir beaucoup de variables globales car cela montre que le programme n'est pas très bien organisé et que tout est un peu mélangé.

Nightmarez
Nightmarez
Niveau 9
11 décembre 2011 à 19:01:12

Pocolo > La desorganisation du code et les possibles conflits de noms, c'est le seul desavantages aux variables globales ? Ou y'a des trucs un peu plus pousse niveau compilation qui font que c'est a eviter ?

Silvermo
Silvermo
Niveau 26
11 décembre 2011 à 19:03:28

La modification d'une variable globale peut avoir des effets de bord, après tout une variable globale a un impact global

caelacanthe
caelacanthe
Niveau 10
11 décembre 2011 à 19:14:28

il n'y a pas une différence niveau performances, aussi? :(

enfin, c'est dans les cas d'optimisation vraiment poussée que ça peut avoir un impact visible. :oui:

Pocolo
Pocolo
Niveau 10
11 décembre 2011 à 19:37:52

" La desorganisation du code et les possibles conflits de noms, c'est le seul desavantages aux variables globales ? "

En gros oui mais c'est déjà non négligeable. A noter aussi que lorsque l'on définit plusieurs variables globales dans plusieurs fichiers différents leur ordre d'initialisation n'est pas défini (dans un seul fichier elles sont initialisées dans l'ordre où elles apparaissent mais l'on ne sait pas si les variable du fichier x seront initialisées avant celles du fichier y ou vice versa), encore que ça ce n'est pas forcément gênant.

Au passage j'en profite pour signaler que l'on peut régler les problèmes de conflit entre les variables globales et locales grâce a l'opérateur de résolution de portée ( :: ), exemple :

int var = 0; // variable globale

void fonction()
{
int var = 0; // variable locale

var = 2; // assigne 2 à la variable locale
::var = 7; // assigne 7 à la variable globale
}

Si l'on ne met rien à gauche de l'opérateur "::" on fait référence à la portée globale. Mais c'est quand même mieux d'éviter ce genre de conflit.

Pocolo
Pocolo
Niveau 10
11 décembre 2011 à 19:43:15

Oh, j'oubliais que l'on parlait du C, l'opérateur de résolution de portée n'existe pas en C donc ce que j'ai dit n'est valable que pour C++,toutes mes excuses.

godrik
godrik
Niveau 30
11 décembre 2011 à 20:22:46

Le probleme de porte peut se regler en C par l'utilisation d'une structure. Ainsi on accede a GLOBALE.var par exemple.

Nightmarez
Nightmarez
Niveau 9
11 décembre 2011 à 21:24:30

Dans un cas extreme de confusion, que fais le compilateur ?

Par exemple:

int x;

void fonction()
{
int x;

x = 5;
}

Quelle variable X sera attribuee ? Est-ce qu'il est possible de definir deux variables de telle maniere ?

Pocolo
Pocolo
Niveau 10
11 décembre 2011 à 21:27:45

Comme dans l'exemple que j'ai donné plus haut, dans ce cas c'est à la variable locale que tu assignes la valeur. La variable globale est "masquée" par la variable locale.

Nightmarez
Nightmarez
Niveau 9
11 décembre 2011 à 21:42:03

D'accord, donc ca va chercher le label dans le scope le plus proche ?

Pocolo
Pocolo
Niveau 10
11 décembre 2011 à 21:49:07

Oui, enfin le scope dans lequel le programme se trouve à ce moment-là.

Aldebran
Aldebran
Niveau 10
11 décembre 2011 à 21:51:13

Théoriquement les variables globales qui sont utilisées à l'intérieur d'une fonction devraient être passées en paramètres de la fonction si l'on veut être propre. L'inconvénient par contre en C c'est qu'on a vite tendance à avoir des fonctions avec un très grand nombre de paramètres.

godrik
godrik
Niveau 30
12 décembre 2011 à 00:11:40

"Théoriquement les variables globales qui sont utilisées à l'intérieur d'une fonction devraient être passées en paramètres de la fonction si l'on veut être propre."

Non. Si il s'agit vraiment d'une variable globale alors la passer en parametre est juste redondant. Les variables globales ont beaucoup d'utilite pour tous les concepts dont il n'existe qu'un seul exemplaire dans l'application. (Typiquement les singletons en programmation oriente objet.)

"L'inconvénient par contre en C c'est qu'on a vite tendance à avoir des fonctions avec un très grand nombre de paramètres."

Les fonctions avec beaucoup de parametre sont des tueurs de performances. Si une fonction prends beaucoup de paramtre, il est souvent preferable de passer un pointeur sur un structure qui contient les parametres.

Pocolo
Pocolo
Niveau 10
12 décembre 2011 à 00:16:43

" Les variables globales ont beaucoup d'utilite pour tous les concepts dont il n'existe qu'un seul exemplaire dans l'application. "

Il y a aussi le keyword "static" pour cela non?

Aldebran
Aldebran
Niveau 10
12 décembre 2011 à 09:13:47

"Non. Si il s'agit vraiment d'une variable globale alors la passer en parametre est juste redondant. Les variables globales ont beaucoup d'utilite pour tous les concepts dont il n'existe qu'un seul exemplaire dans l'application."

Perso je préfère encore être redondant et passer systématiquement en paramètre de ma fonction un pointeur sur une structure qui contient mes variables globales plutôt que d'utiliser des variables qui n'ont pas été déclarées à l'intérieur de ma fonction. Sans ça je n'arrive plus à me relire :(

godrik
godrik
Niveau 30
13 décembre 2011 à 15:18:00

"Il y a aussi le keyword "static" pour cela non?"

Non, static a un autre sens en C. une variable globale declare static limite son scope au fichier courant. En d'autre terme, il n'est pas exporte dans la table des symboles. static utilise dans une fonction indique que tous les appels de cette fonction partage la meme variable. C'est donc une variable globale mais dont le scope est limite a la fonction courante. Elle n'est donc pas accessible depuis une autre fonction (meme au sein du meme fichier).

"Perso je préfère encore être redondant et passer systématiquement en paramètre de ma fonction un pointeur sur une structure qui contient mes variables globales plutôt que d'utiliser des variables qui n'ont pas été déclarées à l'intérieur de ma fonction. Sans ça je n'arrive plus à me relire :("
Et perdre un registre ou forcer un empilement de plus a chaque appel de fonction? Je ne pense pas que tu y sois gagnant en terme de performance. Et c'est pour cela que l'on fait du C en general...

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment