C si déclaration avec & amp; & amp; - Quelle fonction sera exécutée en premier?
Si j'ai une instruction if dans C qui ressemble à:
if( function1() > 0 && function2() > 0 ){
//blah
}
Quelle fonction exécuter en premier et il exécute toujours dans cet ordre?
source d'informationauteur PJT
Vous devez vous connecter pour publier un commentaire.
Ici
function1()
est garanti à exécuter en premier.La
&&
opérateur est un de court-circuit de l'opérateur.function2()
même ne pas être appelé, à moins que le résultat defunction1()
est supérieure à zéro.Du standard C99:
function1()
sera exécuté en premier et si son résultat est inférieur ou égal à 0function2()
n'est pas exécutée du tout.function1
et oui.function2
sera appelée si et seulement si la condition précédente esttrue
.Ceci est appelé le "court-circuit", et c'est essentiel, par exemple pour une déclaration de ce type:
if (p != 0 && *p == 'X')
Nous pouvons être certains quep
n'est jamais déréférencé si elle est null.Dans ce cas particulier, fonction1 sera toujours exécutée d'abord parce que vous êtes en utilisant le && opérateur de.
En outre, si fonction1() > 0, fonction2 ne sera pas appelé.
Cela permettra d'évaluer à partir de la gauche vers la droite. Check this out pour plus d'infos
function1()
sera appelé en premier. Ce n'est pas laif
ce qui implique de la commande, mais la&&
: opérande de gauche est évalué en premier, et le deuxième opérande est évalué à tous que si l'opérande de gauche est retourné une valeur non nulle.Dans votre extrait de code
function1()
exécuté en premier etfunction2()
exécutera seulement si la première condition de donnertrue
.Vous pouvez facilement le vérifier: ajoutez un peu de printf dans chacune des fonctions et laissez
function1()
retour 1.