2009-06-09 9 views
2

Ich bin darüber ziemlich positiv, aber nur auf der sicheren Seite zu sein:UND/ODER-Ketten in C

Ist die C-Standard Garantie, dass und Ketten (A & & B & & ...) wird von links nach rechts ausgewertet, und diese Auswertung wird aufhören, sobald eine 0 ist?

Gleiche Frage für OR. (Sobald es eine 1 gibt)

Kann ich darauf für andere C-Stil Sprachen zählen?

Ist dieser Code sicher:

if (somePtr!=NULL && somePtr->someMember==123) 
{ 
    ... 
} 

Antwort

10

Ja, es für C, C++ und C# gewährleistet ist. Gleiches gilt für Delphi mit aktiviertem "Short Curcuit Evaluation".

Dieses Verhalten verhalten sich zu diesem Zeitpunkt zahlreiche Codezeilen.

+1

Danke an alle. Nur eine Antwort kann überprüft werden: P –

3

Ja, es ist sowohl von C als auch von C++ standardisiert.

0

Ja, Ihre Annahmen zur Reihenfolge der Operationen in C sind korrekt und das Code-Snippet funktioniert wie vorgesehen. Ich würde von Fall zu Fall andere C-Stil-Sprachen verwenden.

0

Ja, tut es.

Ich habe Leute gesehen, die meinten, war unklar, und ersetzt & & ‚s mit dieser Form:

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

Ich persönlich denke, dass ein bisschen hässlich.