Petit cadeau pour Dobro!

Sujets variés concernant le développement en PureBasic
KarLKoX
Messages : 1191
Inscription : jeu. 26/févr./2004 15:36
Localisation : France
Contact :

Message par KarLKoX »

cederavic a écrit :les structures ne sont pa nessecaire, mais elle simplifi beaucoup le code, et le rend par la meme occasion plus lisible/leger ;)
Et c'est plus propre que des variables globales :)
"Qui baise trop bouffe un poil." P. Desproges
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

ta reponse me leve une question suplementaire !!


les champs d'une structure peuvent t'ils etre appelés a partir d'une procedure ??

sont t'ils Globale ou locale dans ce cas ? :)
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Bien sûr!

La variable qui est liée à la structure, (celle qui contient l'adresse), est locale.

Tu peux la rendre globale de la même façon qu'une autre:
Global Info.MaStructure

Ou bien tu peux déclarer une nouvelle variable à l'intérieur de la procédure, faire ce que tu as à faire, et passer son adresse avec ProcedureReturn

Tartempion.MaStructure
...
...
ProcedureReturn @Tartempion

Et pour récupérer les valeurs de la structure à l'exterieur de la procedure, tu fais Info.MaStructure = MaProcedure()

Code : Tout sélectionner

Structure RESULTAT 
  octet.b 
  Mot.w 
  motlong.l 
  Chaine.s 
EndStructure 

Procedure MaProcedure() 
  Result.RESULTAT 
  
  Result\octet   = #True 
  Result\Mot     = 1234 
  Result\motlong = 12345678 
  Result\Chaine  = "Hello World !" 
  ProcedureReturn @Result 
EndProcedure 

*Valeur.RESULTAT = MaProcedure() 
Debug *Valeur\octet 
Debug *Valeur\Mot 
Debug *Valeur\motlong 
Debug *Valeur\Chaine 
Chris :)
filperj
Messages : 395
Inscription : jeu. 22/janv./2004 1:13

Message par filperj »

Ah non, :evil:
Une procédure ne doit jamais renvoyer un pointeur vers une de ses variables locales.
Quand une procedure se termine, ses variables locales n'existent plus, donc la mémoire où elles se trouvaient peut être réutilisée et modifiée, notamment par les variables d'autres fonctions:

Code : Tout sélectionner


Structure RESULTAT
  octet.b
  Mot.w
  motlong.l
  Chaine.s
EndStructure

Procedure MaProcedure()
  Result.RESULTAT
 
  Result\octet   = #True
  Result\Mot     = 1234
  Result\motlong = 12345678
  Result\Chaine  = "Hello World !"
  ProcedureReturn @Result
EndProcedure

Procedure metlesouk()
  a=7
  b=9
  c.f=0.1
  d$="coucou"
EndProcedure

*Valeur.RESULTAT = MaProcedure()
metlesouk()
Debug *Valeur\octet
Debug *Valeur\Mot
Debug *Valeur\motlong
Debug *Valeur\Chaine 
Par contre, une procedure peut prendre en paramètre un pointeur vers une structure à remplir:

Code : Tout sélectionner


Structure RESULTAT
  octet.b
  Mot.w
  motlong.l
  Chaine.s
EndStructure

Procedure MaProcedure(*result.resultat)
 
  *Result\octet   = #True
  *Result\Mot     = 1234
  *Result\motlong = 12345678
  *Result\Chaine  = "Hello World !"
  ;ProcedureReturn @Result  : du coup, plus besoin de retourner de valeur
EndProcedure

Procedure metlesouk()
  a=7
  b=9
  c.f=0.1
  d$="coucou"
EndProcedure

MaProcedure(@Valeur.RESULTAT)
metlesouk()
Debug Valeur\octet
Debug Valeur\Mot
Debug Valeur\motlong
Debug Valeur\Chaine 
Voilà :wink:
Le chaos l'emporte toujours sur l'ordre
parcequ'il est mieux organisé.
(Ly Tin Wheedle)
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

filperj a écrit :Ah non, :evil:
Une procédure ne doit jamais renvoyer un pointeur vers une de ses variables locales.
Quand une procedure se termine, ses variables locales n'existent plus, donc la mémoire où elles se trouvaient peut être réutilisée et modifiée, notamment par les variables d'autres fonctions:

Tu as 100% raison filperj
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Belle démonstration! . Il faut faire comme dit filperj. (Et ne jamais utiliser la procédure "metlesouk", elle fout un de ces bordel...!) :lol:

Ca montre aussi ce qui peut arriver quand on a que les codes des autres pour apprendre.

Bon, ben va encore falloir que je change ma façon de faire, moi !!! :wink:

Chris :)
Répondre