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:
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
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 }
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?
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; }
(ou est-ce qu'il ne faut pas trop pousser quand même^^)
Partager