Freigeben über


Nebeneffekte

Die Reihenfolge der Auswertung von Ausdrücken wird durch die bestimmte Implementierung definiert, außer wenn die Sprache einer bestimmten Reihenfolge der Auswertung wird sichergestellt Rangfolge und Auswertungsreihenfolge(wie in beschrieben).Zum Beispiel treten Nebeneffekte in den folgenden Funktionsaufrufen auf:

add( i + 1, i = j + 2 );
myproc( getc(), getc() );

Die Argumente eines Funktionsaufrufs können in einer beliebigen Reihenfolge ausgewertet werden.Der Ausdruck i + 1 wird vor i = j + 2ausgewertet werden, oder i = j + 2 wird vor i + 1ausgewertet werden.Das Ergebnis ist in jedem Fall unterschiedlich.Entsprechend ist es nicht möglich, sicherzustellen, welche Zeichen zu myprocübergeben werden.Da unär Inkrementieren und Dekrementieren Sie Zuweisungen Vorgänge einschließen, können solche Operationen Nebeneffekte, wie im folgenden Beispiel gezeigt:

x[i] = i++;

In diesem Beispiel ist der Wert von x , die geändert wird, unvorhersehbar.Der Wert des Feldindexes kann entweder der neuen oder alten Wert von isein.Das Ergebnis kann mit verschiedenen Ebenen Optimierung oder andere Compiler unterscheiden.

Da C nicht die Reihenfolge der Auswertung von Nebeneffekten definiert, sind beide Bewertungsverfahren, die oben besprochenen richtig und entweder wird implementiert werden.Um sicherzustellen, dass der Code portabel und klar ist, sollten Sie die Anweisungen in einer bestimmten Auswertungsreihenfolge für Nebeneffekte abhängen.

Siehe auch

Konzepte

Ausdrucksauswertung (C)