Der Titel ist etwas vage, da ich nicht wirklich weiß, wie ich diese Frage definieren soll.
Es hat mit dem folgenden Code zu tun:
%Vor%Werden die Anweisungen in der for-Schleife garantiert nacheinander ausgeführt?
Zum Beispiel ist m_matchBase = match->requestedBase
garantiert nach match = match->next
?
Die Ausdrücke werden von links nach rechts ausgewertet und nach jeder Auswertung gibt es einen Sequenzpunkt . In C die Grammatik für eine for-Anweisung ohne Deklaration aus dem Entwurf C99 Standardabschnitt 6.8.5
Iterationsanweisungen ist:
für (Ausdruck opt ; Ausdruck opt ; Ausdruck opt ) Anweisung
Also ist die ,
in jeder Menge von Ausdrücken ein Kommaoperator , im Gegensatz zu nur einem Trennzeichen, das bedeutet, dass die Zuweisungen von links nach rechts ausgewertet werden. Dies wird im Abschnitt 6.5.17
Komma-Operator behandelt, der besagt:
Der linke Operand eines Komma-Operators wird als void-Ausdruck ausgewertet; da ist ein Sequenzpunkt nach seiner Auswertung. Dann wird der rechte Operand ausgewertet; Das Ergebnis hat seinen Typ und Wert
Ob dies ein wartbarer Code ist, ist eine andere Frage. Es ist wichtig zu beachten, dass, wenn match>next
NULL
zurückgibt, Sie aufrufen werden undefiniertes Verhalten in nachfolgenden Unterausdrücken. Was wahrscheinlich einen Weg darstellt, dies zu demonstrieren, ist eine schlechte Wahl im Stil, da es leicht zu übersehen ist und schwer in der aktuellen Form zu überprüfen ist.
Ja.
Der linke Operand eines Komma-Operators wird als void-Ausdruck ausgewertet; da ist ein Sequenzpunkt zwischen seiner Auswertung und der des rechten Operanden. Dann das Richtige Operand wird ausgewertet; Das Ergebnis hat seinen Typ und Wert.
Der Operator &&
hat auch einen Sequenzpunkt.
Tags und Links c sequence-points