Si tengo una sentencia if en C que se parece a:C if instrucción con && - ¿Qué función se ejecutará primero?
if(function1() > 0 && function2() > 0){
//blah
}
Qué función se ejecutará primero y será siempre ejecutar en ese orden?
Si tengo una sentencia if en C que se parece a:C if instrucción con && - ¿Qué función se ejecutará primero?
if(function1() > 0 && function2() > 0){
//blah
}
Qué función se ejecutará primero y será siempre ejecutar en ese orden?
Aquí function1()
es garantizado para ejecutar primero.
El operador &&
es un short-circuiting operator. function2()
ni siquiera se llamará a menos que el resultado de function1()
sea mayor que cero.
de la norma C99:
A diferencia del bit a bit & operador binario, las garantías & & operador de izquierda a derecha evaluación; hay un punto de secuencia después de la evaluación del primer operando. Si el primer operando se compara con 0, el segundo operando no se evalúa.
¿No es eso al revés? Si 'function1()> 0' es verdadero, entonces debe llamarse a' function2'. –
Ah, tu edición lo arregló. +1. –
function1
, y sí. function2
se llamará si y solo si la condición anterior es true
.
Esto se conoce como "cortocircuito", y es esencial, por ejemplo para una sentencia como esta: if (p != 0 && *p == 'X')
Podemos estar seguros de que p
nunca llega sin referencia que si es nulo.
Oops, supongo que querías decir la verdad. – jman
@skjaidev: ¡Lo hice, gracias!Tenía barras en mi mente ... –
En este caso particular, la función 1 siempre se ejecutará primero porque está utilizando el operador & &.
Además, si function1()> 0, la función 2 no se llamará en absoluto.
function1()
se llamará primero. No es el if
el que implica el pedido, sino el &&
: el operando izquierdo se evalúa primero, y el segundo operando se evalúa solo si el operando izquierdo devolvió un valor distinto de cero.
function1()
se ejecutará primero y si su resultado es menor o igual a 0 function2()
no se ejecuta en absoluto.
Esto se evaluará de izquierda a derecha. Mira bien para more info
En el fragmento de código function1()
ejecutará primero y function2()
ejecutará solamente si primera condición dará true
.
Puede comprobar fácilmente hacia fuera: añadir un poco de printf en cada función y dejar function1()
retorno 1.
¿No function1 ejecuta antes function2, y siempre será, en ese orden. Si la función 1 falla, la función 2 no se ejecutará en absoluto. – user626912