Frage

Ich bin ziemlich positiv darüber, aber nur auf der sicheren Seite zu sein:

Ist die C-Standard Garantie dafür, dass und Ketten (A && B && ...) wird links nach rechts ausgewertet werden, und dass die Bewertung stoppt, sobald es ein 0?

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

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

Ist dieser Code sicher:

if (somePtr!=NULL && somePtr->someMember==123)
{
     ...
}
War es hilfreich?

Lösung

Ja, ist es garantiert für C, C ++ und C #. Das gleiche gilt für Delphi mit "short curcuit Bewertung" aktiviert ist.

Dies ist das Verhalten zahlreiche Codezeilen verlassen sich auf zu diesem Zeitpunkt.

Andere Tipps

Ja, wird es sowohl von C und C ++ standardisiert.

Ja, Ihre Annahmen über die Reihenfolge der Operationen in C korrekt sind und der Code-Snippet wird wie vorgesehen. Ich würde andere „C-Stil“ Sprachen auf einer Fall-zu-Fall-Basis.

Ja, es funktioniert.

Ich habe gesehen, wie Leute, die dachten, dass unklar war, und ersetzt && 's mit dieser Form:

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

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top