Comportement non compris variable globale et procédure

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Shadow
Messages : 1428
Inscription : mer. 04/nov./2015 17:39

Comportement non compris variable globale et procédure

Message par Shadow »

Salut,

Dans ce code, on se dis qu'il y a un gros bug, je viens d'avoir un soucis avec un de mes programme ou
je ne comprenais pas le problème, et c'est ragean de pas savoir ou est le problème ****** :twisted: :twisted: :twisted:
En faite, le soucis viens de la variable pourtant bien globale, qui n'est pas déclaré avant la procédure, du coup ça marche pas !
Fred devrai faire un truc pour avertir de ce genre de truc car tu peu chercher très longtemps avant de comprendre la soucis !
Pour moi la logique est la suivante:

Création d'une variable globale MyVar.i qui vaut 999, après j'appel ma fonction, le résultat devrait donc être:
Dans testProc: MyVar = 999
Dans testProc: MyVar = 42
Après la déclaration Global, MyVar = 42
Dans testProc: MyVar = 42
Dans testProc: MyVar = 42
Après la déclaration Global, MyVar = 42

Mais bon, c'est parce que j'ai rien compris, ça doit forcement être ça :mrgreen:

Code : Tout sélectionner

; --- Procédure qui utilise MyVar ---
Procedure testProc()
  Debug "Dans testProc: MyVar = " + Str(MyVar)
  MyVar = 42
  Debug "Dans testProc: MyVar = " + Str(MyVar)
EndProcedure

; Maintenant, on déclare MyVar en Global
Global MyVar.i
MyVar = 999

testProc()  

Debug "Après la déclaration Global, MyVar = " + Str(MyVar)

; On rappelle la procédure
testProc()
; => Cette fois, MyVar est bien la globale valant 999

Debug "Après la déclaration Global, MyVar = " + Str(MyVar)
Résultat:
Dans testProc: MyVar = 0
Dans testProc: MyVar = 42
Après la déclaration Global, MyVar = 999
Dans testProc: MyVar = 0
Dans testProc: MyVar = 42
Après la déclaration Global, MyVar = 999
AMD Ryzen 5 3600 (6 cœurs / 12 threads, Socket AM4)
Gainward GeForce RTX 3070 (8 GB GDDR6)
ASUS PRIME A320M-K (chipset AMD A320)
64 GB DDR4-3200
Asus 24 Pouces: 1920 x 1080.
Système: Windows 10 64 Bits.

PureBasic: 6.30 beta 4 x64 Bits.
Avatar de l’utilisateur
falsam
Messages : 7340
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Comportement non compris variable globale et procédure

Message par falsam »

Bien que non précisé dans l'aide, les variables globales doivent être déclarées avant leurs utilisations dans les procédures. Ajoute EnableExplicit au début de ton code et tu en auras la confirmation.
Configuration : Windows 11 Famille 64-bit - PB 6.23 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7340
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Comportement non compris variable globale et procédure

Message par falsam »

Je pensais que ce n'était pas clairement indiqué dans l'aide mais en fait c'est bien notifié.

A propos des procédures, si tu souhaites accéder aux variables globales il faut les partager au préalable.

https://www.purebasic.com/french/docume ... %20Static).
Configuration : Windows 11 Famille 64-bit - PB 6.23 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Shadow
Messages : 1428
Inscription : mer. 04/nov./2015 17:39

Re: Comportement non compris variable globale et procédure

Message par Shadow »

Salut Falsam :)

Je n'est pas vue ou étais indiqué ceci, pour moi il faudrait l'indiquer, avec des exemples en plus pour expliquer le comportement.
"Les variables globales doivent être déclarées avant leurs utilisations dans les procédures"

Je propose cet ajout qui ne sera que utile !
Car ça peut vraiment mettre le Bazard :wink:
Merci à toi.
AMD Ryzen 5 3600 (6 cœurs / 12 threads, Socket AM4)
Gainward GeForce RTX 3070 (8 GB GDDR6)
ASUS PRIME A320M-K (chipset AMD A320)
64 GB DDR4-3200
Asus 24 Pouces: 1920 x 1080.
Système: Windows 10 64 Bits.

PureBasic: 6.30 beta 4 x64 Bits.
Répondre