2017-09-01 1 views
-5

Die Frage ist zu verstehen, wie die Standards definiert wurden, um diese Situationen zu behandeln und was Verhalten in diesem speziellen Fall wäre, in dem die Variable Post/Pre-Inkrement in der gleichen Anweisung wie der Ausdruck verwendet wird Es wird als Argument für den Funktionsaufruf verwendet.postincrement Operation in derselben Anweisung

Nehmen Sie zum Beispiel folgenden Beispielcode

char a[SZ]; 

welche der folgenden wäre richtig?

strlcpy(&a[i++],"Text",SZ-i-1); 

strlcpy(&a[i++],"Text",SZ-i); 

wenn der

"" comma

für die Berechnung verwendet wird, würde der i ++ oder

";" Semikolon

??

+0

@ tobi303 Der Punkt des Beispiels ist zu verstehen, wie es in dieser Situation funktioniert. und ja, ich bin ein fauler Programmierer :) –

Antwort

2

Da in diesem Fall die "durch Komma getrennten Ausdrücke" Parameter einer Funktion sind (strlcpy), ist die Reihenfolge der Auswertung der Ausdrücke nicht spezifiziert, selbst in C++ 17. Allerdings garantiert C++ 17, dass die Ausdruckauswertung nicht zwischen Argumenten verschachtelt wird, so dass jeder Ausdruck vollständig gebildet wird, bevor er einen anderen bildet. So können Sie sich in Ihrem strlcpy(&a[i++],"Text",SZ-i) nicht auf den Wert i verlassen: es könnte ein anderes Verhalten abhängig von Ihrer Implementierung aufweisen. Obwohl es kein undefiniertes Verhalten ist, wissen Sie, dass es entweder der alte Wert i oder der alte Wert plus eins ist.

+0

solche Klarheit, danke :) –

Verwandte Themen