C se la dichiarazione con && – Che la funzione eseguirà prima?

Se ho un’istruzione if in C che si presenta come:

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

    //blah

}

Che la funzione verrà eseguita prima e sarà sempre eseguire in che ordine?

  • Non function1 viene eseguito prima funzione2, e sarà sempre in ordine. Se function1 non riesce quindi funzione2 non essere eseguito.
InformationsquelleAutor PJT | 2011-11-28

 

7 Replies
  1. 27

    Qui function1() è garantito da eseguire per primo.

    Il && operatore è un cortocircuito operatore. function2() anche non essere chiamati a meno che il risultato di function1() è maggiore di zero.

    Da standard C99:

    A differenza di bit binari & operatore, && operatore garantisce da sinistra a destra di valutazione;
    c’è una sequenza in punto, dopo la valutazione del primo operando. Se il primo operando
    confronta uguale a 0, il secondo operando non viene valutata.

    • Non è un passo indietro? Se function1() > 0 è vero, allora function2 deve essere chiamato.
    • Ah, edit risolto. +1.
  2. 3

    function1, e sì. function2 sarà chiamato se e solo se la condizione precedente è true.

    Questo è chiamato “corto circuiti”, ed è essenziale, per esempio per una dichiarazione come questa: if (p != 0 && *p == 'X') Possiamo essere certi che p non viene mai risolto se è null.

    • Oops, credo che hai fatto, vero.
    • Ho fatto, grazie! Avevo bar nella mia mente…
  3. 1

    In questo caso particolare, funzione1 sarà sempre eseguito per primo, perché si sta utilizzando il && operatore.

    Inoltre, se funzione1() > 0, funzione2 non sarà chiamata a tutti.

  4. 0

    function1() verrà chiamato per primo. Non è il if che implica l’ordinazione, ma il &&: operando di sinistra è valutato per primo, e il secondo operando è valutata solo se l’operando di sinistra ha restituito un valore diverso da zero.

  5. 0

    Nello snippet di codice function1() verrà eseguito prima e function2() eseguirà solo se la prima condizione di dare true.

    Si può facilmente verificare: aggiungere alcuni printf in ogni funzioni e lasciare function1() ritorno 1.

Lascia un commento