Conditionnelle if en VB6

[Résolu]
Signaler
Messages postés
29
Date d'inscription
mardi 20 avril 2010
Statut
Membre
Dernière intervention
13 juillet 2010
-
Messages postés
29
Date d'inscription
mardi 20 avril 2010
Statut
Membre
Dernière intervention
13 juillet 2010
-
Bonjour a tous.

J'espère que vous allez bien.

J'ai une petite question sur la résolution du if.

If tabtmpfiguresverres(2, i) <> tabtmpfiguresverres(2, i - 1) And i <> 0 Then

mon i étant initialisé à 0 lors de ma premiere itération la premiere partie ferait planté mon programme ( segmentation fault). J'aimerai en savoir un peut plus sur la fassson qu'a le compilateur de résoudre cette conditionnelle. es qu'il regarde de gauche a droite ou de droite a gauche ou es qu'il fait tout en meme temps?

Merci beaucoup!

PS: je cherche pour la rentrée prochaine une entreprise qui prenderai un apprenti ingénieur informatique, n'ésitez pas a me contacté si vous avez des infos ^^

3 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
78
Salut
Oui, ça va. Un peu mal aux reins, mais ça va.

Quand tu fais un If, toutes les conditions sont calculées.
Quand i = 0, c'est sur que l'appelle d'une dimension à -1 (=0-1) doit poser problème.
Il faut découper ton If en deux If :
    If i > 0 Then
        If tabtmpfiguresverres(2, i) <> tabtmpfiguresverres(2, i - 1) Then
            ' ton code
        End If
    End If

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
52
Salut
Le compiler execute de gauche à droite
tu peux voir avec le debugger
mais selon ton exemple il n'y a pas de différence
si tu écris
If tabtmpfiguresverres(2, i) <> tabtmpfiguresverres(2, i - 1) And i <> 0 Then
ou
If i <> 0 and tabtmpfiguresverres(2, i) <> tabtmpfiguresverres(2, i - 1) Then
Tu reçois une erreur "subscrit out of range"
et meme si le compiler execute de droite à gauche
dans ton cas c'est la meme chose
si j'écris If A and B then le compiler execute A
(A peut etre une sub ou fonction ) le résultat est gardé provisoirement.Bien sur si il y a une erreur le compiler ne continue pas autrement il continue et essaye d'executer B et à la fin fait
l'opération logique AND
Pour cela vaut mieux écrire
IF A then
IF B then
Messages postés
29
Date d'inscription
mardi 20 avril 2010
Statut
Membre
Dernière intervention
13 juillet 2010

merci beaucoup pour ces petites présisions!

a bientot!