Heim >Backend-Entwicklung >C++ >Beeinflusst die unbestimmte Argumentauswertungsreihenfolge von C jemals das Programmverhalten?
Compiler und Auswertungsreihenfolge unbestimmter Argumente
Der C-Standard ermöglicht Implementierungen, Funktionsargumente in beliebiger Reihenfolge auszuwerten. Hat dies jemals Auswirkungen auf das Programmverhalten?
Das vermutete Problem
Beachten Sie den folgenden Codeausschnitt:
int i = 0; foo(i++, i++);
Wenn Argumente von links nach rechts ausgewertet werden , i wird zweimal erhöht, bevor es an foo übergeben wird. Wenn Argumente jedoch von rechts nach links ausgewertet werden, wird i nur einmal erhöht. Könnte dies zu Problemen führen?
Compiler und Argumentauswertung
Während die Reihenfolge der Argumentauswertung von der Implementierung abhängt, halten sich die meisten Compiler an die Aufrufkonvention der Zielarchitektur. Auf x86 wertet die Pascal-Aufrufkonvention Argumente von links nach rechts aus, während die C-Aufrufkonvention (__cdecl) sie von rechts nach links auswertet.
Compiler berücksichtigen dies häufig, insbesondere bei plattformübergreifenden Programmen, um unerwartete Ereignisse zu vermeiden Verhalten.
Fazit
Die Reihenfolge der Argumentauswertung ist nicht sprachabhängig, sondern plattformabhängig Implementierungsabhängig. Während der Standard die Reihenfolge nicht festlegt, folgen Compiler in der Regel der Aufrufkonvention der Zielarchitektur und können die Auswertungsreihenfolge entsprechend anpassen. Dadurch wird sichergestellt, dass sich schlecht geschriebener Code bei korrekter Aufrufkonvention konsistent verhält.
Das obige ist der detaillierte Inhalt vonBeeinflusst die unbestimmte Argumentauswertungsreihenfolge von C jemals das Programmverhalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!