UND / ODER-Ketten in C
-
13-09-2019 - |
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)
{
...
}
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.