 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
King Leo - Martin Oberzal Guest
|
Posted: Sat Nov 08, 2003 1:39 am Post subject: Reihenfolge von Funktionsparametern |
|
|
Hallo,
void foo( int a, int b, int c );
int a=0;
foo( a++, a++, a++ );
Das Verhalten ist ja in diesem Beispiel undefiniert. Warum?
Warum ist dies nicht im Standard definiert?
Gibt es dafür spezielle Gründe? Wenn ja, welche?
Oder ist es einfach undefiniert?
Gruß, Martin!
--
Enie Sdutie der Uni Cgabdmire hat ftetelesgslt, dsas man die Beatsubhcn
eeins Wtoers, bis auf den Anngafs- und Euacdebbtshnn, keptmolt veeedrhrn
knan und der Txet tdtoerzm ncoh lasebr ist.
http://kingleo.pages.at/index_shuffle.xml.php
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Kostka, Volkmar Guest
|
Posted: Sat Nov 08, 2003 2:31 am Post subject: Re: Reihenfolge von Funktionsparametern |
|
|
Hallo,
King Leo - Martin Oberzalek wrote:
| Quote: | Hallo,
void foo( int a, int b, int c );
int a=0;
foo( a++, a++, a++ );
Das Verhalten ist ja in diesem Beispiel undefiniert. Warum?
Es gibt zwei Gruende - zumindestens fallen mir zwei ein: |
a) es ist undefiniert, in welcher Reihenfolge Funktionsargumente
ausgewertet werden.
b) die Variable a wird zwischen zwei Sequenzpunkten mehrfach veraendert.
Das Komma zwischen den Argumenten ist *kein* Komma-Operator.
| Quote: | Warum ist dies nicht im Standard definiert?
|
Gegenfrage: Warum sollte es definiert sein?
Fuer Punkt a) gibt es mE einen einfachen Grund:
Da im Standard nicht geregelt ist, wie Parameter an Funktionen ueber-
geben werden, hat es auch keinen Sinn, die Reihenfolge zu definieren.
Einige System verwenden einen Stack, dann wird meistens das letzte
Argument zuerst uebergeben. Andere Systeme benutzen die Register, da
macht es ueberhaupt keinen Sinn eine Reihenfolge festzulegen. Einige
Betriebssysteme erwarten bei einem API Aufruf das erste Argument zuerst,
einige andere das letzte zuerst. Daher ist sowas immer implementations-
abhaengig.
| Quote: | Gibt es dafür spezielle Gründe? Wenn ja, welche?
|
Punkt a) s.o.
Punkt b) keine Ahnung, hat aber sicher was mit Punkt a) zu tun.
| Quote: | Oder ist es einfach undefiniert?
|
Punkt a) ist implementationsabhaengig, aber definiert.
Punkt b) ist immer undefiniert.
MFG
Volkmar Kostka
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Markus Schaaf Guest
|
Posted: Sat Nov 08, 2003 7:07 am Post subject: Re: Reihenfolge von Funktionsparametern |
|
|
"King Leo - Martin Oberzalek" <kingleo (AT) gmx (DOT) at> schrieb:
| Quote: | foo( a++, a++, a++ );
Das Verhalten ist ja in diesem Beispiel undefiniert. Warum?
Warum ist dies nicht im Standard definiert?
Gibt es dafür spezielle Gründe? Wenn ja, welche?
|
Das ist keine Spezialität von Funktionsaufrufen. Innerhalb fast
jedes beliebigen Ausdrucks ist die Reihenfolge von Seiteneffekten
nicht definiert. Warum: Damit der Compiler sie ändern kann, z.B.
aus Effizienzgründen.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|