Conditionnelle if en VB6

Résolu
denver78610 Messages postés 29 Date d'inscription mardi 20 avril 2010 Statut Membre Dernière intervention 13 juillet 2010 - 20 mai 2010 à 10:20
denver78610 Messages postés 29 Date d'inscription mardi 20 avril 2010 Statut Membre Dernière intervention 13 juillet 2010 - 20 mai 2010 à 12:22
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

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
20 mai 2010 à 10:32
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)
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
20 mai 2010 à 11:18
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
denver78610 Messages postés 29 Date d'inscription mardi 20 avril 2010 Statut Membre Dernière intervention 13 juillet 2010
20 mai 2010 à 12:22
merci beaucoup pour ces petites présisions!

a bientot!
Rejoignez-nous