Global, grave ou pas ?

Résolu
Ziman Messages postés 245 Date d'inscription dimanche 27 avril 2003 Statut Membre Dernière intervention 26 septembre 2008 - 19 sept. 2006 à 02:34
Ziman Messages postés 245 Date d'inscription dimanche 27 avril 2003 Statut Membre Dernière intervention 26 septembre 2008 - 20 sept. 2006 à 21:43
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

BunoCS Messages postés 15342 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 26 janvier 2023 103
19 sept. 2006 à 16:02
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
3
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
19 sept. 2006 à 09:35
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++
0
Ziman Messages postés 245 Date d'inscription dimanche 27 avril 2003 Statut Membre Dernière intervention 26 septembre 2008
19 sept. 2006 à 13:08
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
0
BunoCS Messages postés 15342 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 26 janvier 2023 103
19 sept. 2006 à 15:49
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ziman Messages postés 245 Date d'inscription dimanche 27 avril 2003 Statut Membre Dernière intervention 26 septembre 2008
19 sept. 2006 à 15:58
Euh, c'est du classe, ca existe pas les classes en C si ?

Apprendre le VB6
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
19 sept. 2006 à 18:01
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++
0
Ziman Messages postés 245 Date d'inscription dimanche 27 avril 2003 Statut Membre Dernière intervention 26 septembre 2008
20 sept. 2006 à 00:45
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
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
20 sept. 2006 à 00:56
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++
0
Ziman Messages postés 245 Date d'inscription dimanche 27 avril 2003 Statut Membre Dernière intervention 26 septembre 2008
20 sept. 2006 à 21:43
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
0
Rejoignez-nous