2011-11-28 15 views

Respuesta

21

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.

+0

¿No es eso al revés? Si 'function1()> 0' es verdadero, entonces debe llamarse a' function2'. –

+0

Ah, tu edición lo arregló. +1. –

3

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.

+0

Oops, supongo que querías decir la verdad. – jman

+0

@skjaidev: ¡Lo hice, gracias!Tenía barras en mi mente ... –

1

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.

0

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.

3

function1() se ejecutará primero y si su resultado es menor o igual a 0 function2() no se ejecuta en absoluto.

0

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.

Cuestiones relacionadas