Prog C : multiple if ou ||

Résolu/Fermé
MatthMirage Messages postés 46 Date d'inscription lundi 17 décembre 2007 Statut Membre Dernière intervention 13 juin 2013 - 2 mars 2010 à 14:12
garion28 Messages postés 1545 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 3 avril 2011 - 3 mars 2010 à 09:01
Bonjour,
J'essaye d'optimisé un bout de code en C.
Je me pose la question suivante :
Quelle code sera le plus rapide ?

if (toto==1) return 0;
if (tata == 0) return 0;
if (titi == 2) return 0;

Ou

if (toto == 1 ||
tata == 0 ||
titi == 2)
return 0;


Merci
A voir également:

5 réponses

Bonjour,
Les deux codes sont exactement identiques en terme de rapidité;
Dans les deux cas, les 3 tests sont effectués séquentiellement jusqu'à ce qu'UN soit vrai.

Dubcek : Je confirme qu'avec l'opérateur ||, le test s'arrête au premier VRAI ; Et donc c'est identique dans les deux cas.

Cordialement,
M.
1
dubcek Messages postés 18767 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 5 mars 2025 5 628
2 mars 2010 à 16:15
hello
le premier parce que si toto=1, il ne fait qu'un test ou si tata=0, que 2.
mais il faudrait regarder le code généré par l'optimiseur, parce qu'avec || peut-être que le test s'arrête au premier vrai
0
MatthMirage Messages postés 46 Date d'inscription lundi 17 décembre 2007 Statut Membre Dernière intervention 13 juin 2013 4
2 mars 2010 à 16:20
Merci pour ta reponse,
Je viens juste de finir un test.
Le code généré (asembleur et compilation compléte) est plus leger dans le cas ||, et le test s'arréte bien au premier vrai ;)

Merci en tout cas,
Je cloture :D
0
garion28 Messages postés 1545 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 3 avril 2011 406
2 mars 2010 à 16:21
je pencherai pour le deuxième puisque quelqu'au final ca retourne 0
de plus si tes 3 variables sont bien égal aux valeur associé alors ca retournera 3 fois 0, ce qui plantera (c'est pour ca qu'il est préférable de n'avoir qu'un seul return par fonction)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
MatthMirage Messages postés 46 Date d'inscription lundi 17 décembre 2007 Statut Membre Dernière intervention 13 juin 2013 4
2 mars 2010 à 16:24
@garion28
La fonction s'arréte au premier return. Donc pas plusieur return ;)
0
garion28 Messages postés 1545 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 3 avril 2011 406
3 mars 2010 à 09:01
ah d'ac, c'est toujours une info qui est bonne a prendre ^^ (même si perso je ne suis pas adepte de la premiere méthode)
0