Domanda

Sono più o meno positivo su questo, ma solo per essere sul sicuro:

fa la garanzia standard di C che e catene (A && B && ...) saranno valutate da sinistra a destra, e che la valutazione si fermerà non appena c'è un 0?

Stessa domanda per OR. (Appena c'è un 1)

Posso contare su questo per le altre lingue in stile C?

Questa funzione è sicura codice:

if (somePtr!=NULL && somePtr->someMember==123)
{
     ...
}
È stato utile?

Soluzione

Sì, è garantito per la C, C ++ e C #. Lo stesso vale per Delphi con "breve valutazione curcuit" abilitato.

Questo è un comportamento numerose linee di codice si affidano a questo momento.

Altri suggerimenti

Si, è standardizzato sia da C e C ++.

Sì, le vostre ipotesi circa l'ordine delle operazioni in C sono corrette e il frammento di codice funzionerà come previsto. Vorrei prendere altre lingue "C-style", caso per caso.

Si fa.

Ho visto persone che hanno pensato che era poco chiaro, e sostituiti s '&& con questa forma:

if (a)
if (b)
if (c)
if (d) {
}

Personalmente penso che sia un po brutto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top