web-dev-qa-db-fra.com

C if instruction avec && - Quelle fonction s'exécutera en premier?

Si j'ai une instruction if en C qui ressemble à ceci:

if( function1() > 0 && function2() > 0 ){

    //blah

}

Quelle fonction s'exécutera en premier et s'exécutera-t-elle toujours dans cet ordre?

11
PJT

Ici, function1() est garanti pour être exécuté en premier.

L'opérateur && Est un opérateur de court-circuit . function2() ne sera même pas appelé sauf si le résultat de function1() est supérieur à zéro.

De la norme C99:

Contrairement à l'opérateur binaire & au niveau du bit, l'opérateur && garantit une évaluation de gauche à droite; il y a un point de séquence après l'évaluation du premier opérande. Si le premier opérande se compare à 0, le deuxième opérande n'est pas évalué.

28
Mark Byers

function1, Et oui. function2 Sera appelé si et seulement si la condition précédente est true.

Ceci est appelé "court-circuit", et il est essentiel, par exemple pour une instruction comme celle-ci: if (p != 0 && *p == 'X') Nous pouvons être certains que p ne sera jamais déréférencé s'il est nul.

3
Kerrek SB

function1() sera exécuté en premier et si son résultat est inférieur ou égal à 0 function2() n'est pas exécuté du tout.

Dans ce cas particulier, la fonction1 sera toujours exécutée en premier car vous utilisez l'opérateur &&.

De plus, si function1 ()> 0, function2 ne sera pas appelée du tout.

1
Nick

Cela évaluera de gauche à droite. Vérifiez ceci pour plus d'informations

1
tradotto

Dans votre extrait de code, function1() s'exécutera en premier et function2() s'exécutera niquement si la première condition donnera true.

Vous pouvez facilement le vérifier: ajoutez un peu de printf dans chaque fonction et laissez function1() retourner 1.

1
praetorian droid

function1() sera appelé en premier. Ce n'est pas le if qui implique la commande, mais le &&: l'opérande gauche est évalué en premier et le deuxième opérande n'est évalué que si l'opérande gauche a renvoyé une valeur non nulle.

0
Thomas Pornin