Global, grave ou pas ?

Résolu
Messages postés
245
Date d'inscription
dimanche 27 avril 2003
Statut
Membre
Dernière intervention
26 septembre 2008
-
Messages postés
245
Date d'inscription
dimanche 27 avril 2003
Statut
Membre
Dernière intervention
26 septembre 2008
-
Bonjour,

aujourd'hui, une de mes prof m'a dit que les programmeurs fuyaient les variables globales, mais une question m'est venue à l'esprit.

Imaginons que quand j'appuye sur un bouton, ça initialise un pointeur vers un tableau. Donc on clique sur le bouton et paf on a un tableau. Ensuite, si on clique sur un autre bouton, qui lui, doit effectuer des opérations sur le tableau. Comment je dois faire si je peux pas le déclarer en global ?

WndProc (ma procédure de traitement des message) se terminera après le premier click et lors du deuxième clique ben le tableau n'aura plus sa valeur, je me trompe ?

Je suis un peu paumé sur ce coup là, merci de m'indiquer le chemin :p

Apprendre le VB6

9 réponses

Messages postés
15213
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
21 janvier 2022
101
Pardon, pas pigé que tu étais en C. Là, effectivement, les variables globales s'imposent

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
A tes profs toujours répondre "bien sur vous avez toujours raison, etc...".

Ensuite la critique doit réagir (en silence): Aucun tabou ne doit prévaloir, l'informatique n'est ni une religion ni qlq autre obscurantisme. On fait selon le type de prog demandé et exigences du chef si c'est le cas (prof dans ton cas).

ciao...
BruNews, MVP VC++
Messages postés
245
Date d'inscription
dimanche 27 avril 2003
Statut
Membre
Dernière intervention
26 septembre 2008

Oui, je suis d'accord, mais ca ne répond pas à ma question. Les exigences du programmes sont apparemment de ne pas déclarer de variable globale en masse, mais le programme traitant un tableau de mot selon les actions de l'utilisateur, il faut bien que je le déclare global non ? En console je comprendrai que non mais en graphique, ai-je d'autre choix ?

Apprendre le VB6
Messages postés
15213
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
21 janvier 2022
101
Bien sûr.
Tu peux le déclarer dans une classe et passer son pointeur à toutes les classes susceptibles de le modifier

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
Messages postés
245
Date d'inscription
dimanche 27 avril 2003
Statut
Membre
Dernière intervention
26 septembre 2008

Euh, c'est du classe, ca existe pas les classes en C si ?

Apprendre le VB6
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Elles ne s'imposent pas plus qu'en C++ si tu avais instancié une classe depuis le debut, tu pourrais tout autant faire une alloc sur un pointeur static à la wndproc de la fenetre mère et passer le pointeur à chaque fonction, serait tout simplement aussi inutile qu'une classe mais tout autant faisable. C'est clair qu'une declaration static équivaut à placer la variable au segment .data comme si était mis en variable globale, sera contre productif mais ça fait beau pour certains.

ciao...
BruNews, MVP VC++
Messages postés
245
Date d'inscription
dimanche 27 avril 2003
Statut
Membre
Dernière intervention
26 septembre 2008

BruNews, toi, tu ferais comment ? Une classe static ou tu met des variables globales ? (Juste pour avoir l'avis le plus large possible, comme dirait mon prof de philo ... La vérité n'est que le point commun de l'accumulation du maximum de points de vue différents possibles)

Apprendre le VB6
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Si tu es en C il n'y a pas de classe (et tant mieux, he he), ça règle le problème à la base.
Donc si C et pas en global:

LRESULT CALLBACK AppWndProc(HWND hwnd, UINT mssg, WPARAM wParam, LPARAM lParam)
{
  static int stNbr;
  switch(mssg) {
    case WM_DESTROY:
      PostQuitMessage(0);
      return 0;
  }
  return DefWindowProc(hwnd, mssg, wParam, lParam);
}

Tu initialises si besoin stNbr dans WM_CREATE et modifies ensuite où tu veux, faudra par contre passer en param aux funcs devant accéder. Prof sera content, c'est déclaré local malgré que le compilo génèrera code strictement identique à global mais avec lenteur du passage de param en plus.

ciao...
BruNews, MVP VC++
Messages postés
245
Date d'inscription
dimanche 27 avril 2003
Statut
Membre
Dernière intervention
26 septembre 2008

ah ben ué, c'est juste, une variable static. Ué mais c'est se gratter pour se faire rire. Je lui ai expliqué l'affaire et elle a dit qu'elle était d'accord pour les variables globales donc ca va.

Merci pour ces explications

Apprendre le VB6