Bonjour.

J'ai souvent entendu que les compilateurs actuels etaient capable d'optimiser bien mieux que nous et qu'il fallait leur laisser cette tâche. Cela m'amène a la question suivante

dans une fonction "principale", j'appelle a la suite une série de fonction. Elles retournent toutes un booléen qui vaut true si l'execution a reussi, false sinon.
Dès qu'une des fonction retourne false, j'arrète l'execution de la fonction principale et je retourne false.

J'ai plusieures façon d'écrire ça:

1:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
 
bool fonction_principale()
{
 bool valeurRetour=true;
 
 valeurRetour = fonction1();
 if(valeurRetour == true)
  {
    valeurRetour = fonction2();
    if(valeurRetour == true)
    {
     valeurRetour = fonction3();
     if(valeurRetour == true)
       {
          /* etc etc*/
       }
     }
    }
  }
return valeurRetour
}
2:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
bool fonction_principale()
{
 bool valeurRetour=true;
 
 valeurRetour=fonction1();
 if(valeurRetour=false) return false;
 
 if(valeurRetour=true) valeurRetour=fonction2();
 if(valeurRetour=false) return false;
 
 if(valeurRetour=true) valeurRetour=fonction3();
 if(valeurRetour=false) return false;
 
 /* etc etc*/
 
 
 if(valeurRetour=true) valeurRetour=fonctionN();
 
return valeurRetour;
}
je trouve la deuxième méthode beaucoup plus lisible. Mais le problème c'est que si la fonction1 retourne false, il y aura encore (n-1) tests effectués pour rien. Ma question c'est : est-ce que le compilateur se rend compte que j'effectue plein de fois le meme test a la suite, et est-ce qu'il générera le même code machine que dans le premiers cas?
(ou est-ce qu'il ne faut pas trop pousser quand même^^)