Freigeben über


C28753

Warnung C28753: Vertrauen auf nicht definierte Reihenfolge der Auswertung von Parametern

C/C++ ermöglicht es dem Compiler, Code zu generieren, um tatsächliche Parameter in beliebiger Reihenfolge auszuwerten, und die x86- und Arm-Compiler tendieren dazu, unterschiedliche Reihenfolgen auszuwählen. Code, der auf einer bestimmten Reihenfolge basiert, verhält sich auf verschiedenen Plattformen möglicherweise anders.

Ein häufiger Fehler ist die Verwendung intelligenter Zeiger, bei denen die Adresse des Betreibers & Nebenwirkungen hat, in Aufrufen wie folgt:

sp->Foo(&sp);

Die Aufrufe des Mitgliedszugriffsoperators –> und Operator& können in beiden Reihenfolge erfolgen. So können Nebenwirkungen von Operator & vor oder nach operator auftreten -> wird aufgerufen. Diese Warnung findet diese Fehleranrufe, um ein anderes Verhalten zwischen Plattformen zu verhindern.

Beispiel

Im folgenden Codebeispiel wird diese Warnung generiert.

sp->Foo(&sp)

Im folgenden Codebeispiel wird diese Warnung vermieden.

SmartPtr spTemp;
sp->Foo(&spTemp);
sp = spTemp;