OVH Cloud OVH Cloud

bleme "optimisation rapidité du code" (VB6)

3 réponses
Avatar
Thierry M.
Strange :

dans ce mode, lors d'une ouverture de fichier
qui ne contient pas une ligne vierge à la fin
(soit deux "retours chariot")
plantage lorsque le nom d'une variable locale (procédure)
est appellée par une autre qui contient le même
nom de variable : la variable devient partagée ???
- traditionnelement, "I"

ce problème a-t-il été référencé ou il vous
faut un exemple de code précis ?

--
Thierry MARTIN
Forums Réunion (dont parapente)
http://ardf.free.fr/forums/

3 réponses

Avatar
François Picalausa
Bonjour/soir,

Selon ce que j'ai compris tu as:

Option Explicit

Sub Toto()
Dim i As Long
i = 5
MsgBox i
'utilisation de i => plantage?
End Sub

Private Sub Command1_Click()
Dim i As Long
Toto
MsgBox i
End Sub

La variable n'estpas partagée.
Celle dans Toto existe le temps que Toto s'exécute.
Et ce petit bout de code ne plante pas ;-)

Pauxeux-tu préciser quel est ce "plantage" ou redécrire le problème? (un
bout de code est toujours le bienvenu)

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


"Thierry M." a écrit dans le message de
news:
Strange :

dans ce mode, lors d'une ouverture de fichier
qui ne contient pas une ligne vierge à la fin
(soit deux "retours chariot")
plantage lorsque le nom d'une variable locale (procédure)
est appellée par une autre qui contient le même
nom de variable : la variable devient partagée ???
- traditionnelement, "I"

ce problème a-t-il été référencé ou il vous
faut un exemple de code précis ?


Avatar
Zoury
Salut Thierry! :O)

dans ce mode,



quel mode?


lors d'une ouverture de fichier
qui ne contient pas une ligne vierge à la fin
(soit deux "retours chariot")



quel fichier?


plantage lorsque le nom d'une variable locale (procédure)
est appellée par une autre qui contient le même
nom de variable : la variable devient partagée ???



quelle variable? plantage où? pourquoi? quelle est l'erreur et la ligne de
code fautive?


ce problème a-t-il été référencé ou il vous
faut un exemple de code précis ?



ce ne serait pas de refus... j'ai réellement *aucune idée* de ce à quoi tu
fais allusion. ;O)


--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous
Avatar
Thierry M.
François Picalausa écrivait:

La variable n'estpas partagée.
Celle dans Toto existe le temps que Toto s'exécute.



oui, mais si elle est stockée au même endroit, rien ne
va plus: une variable locale n'est pas référencée sous son nom
dans le code, mais à une adresse, non ?

bon, de toute façon, je n'y comprends rien, c'est
incompréhensible et ma compréhrension se refuse
à voir un quelconque rapport entre une fin de fichier,
une variable locale et un appel de sous procédure,
d'autant que ça n'arrive ni en mode programmation
(en pcode, je suppose), ni en mode de compilation
"optimisation de la taille du code" ...

donc,

redécrire le problème? (un
bout de code est toujours le bienvenu)




soit un fichier (format ini) donc genre
[rubrique1]
Item1Úta1
...

on a déjà un tel fichier #1 ouvert et ou on est déjà
positionné sur une [rubrique], on veut savoir quel est
le nombre de lignes de type
ItemÚta
avant la prochaine rubrique [rubrique]
ou avant la fin du fichier, donc :

I=0
Do Until EOF(1)
Ligne_Suivante ' sous procédure appellant la variable$ Ligne_Courante
suivante
I = I + 1
Réponse(I) = Trouve_Item() ' fonction recherche de 'Item', utilise une
variable locale I
If Fin_Rubrique = True Then I = I - 1: Exit Do 'Fin-Rubrique signale qu'on
est arrivé au [] suivant
Coef_Réponse(I) = Val(Trouve_Data()) 'fonction recherche de 'data', utilise
une variable locale I
Loop
NombreRéponses = I 'A
Close #1

For J = 1 To NombreRéponses 'B
Next J

ceci fonctionne correctement, mais si on élude A
pour mettre en B un I à la place de NombreRéponses
on devrais obtenir la même chose non ?
OR quand on quitte le DO LOOP en fin de fichier
si on a pas 2 retours chariots I devient=0 quand
on compile en mode "optimisation de la vitesse du code"

extraordinaire non ?

Bon, de toute façon, suffit de rajouter ces 2 retours chariots,
ou de compiler en "mode d'optimisation de la taille du code"
ou d'utiliser une variable partagée comme dans l'exemple au dessus
(ou de faire tout à la fois, pour être trois fois sur :-) )
pour régler le probleme
mais intellectuellement, ça me dérange quand même ...

--
Thierry non comprendo dérangé :)