C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Reihenfolge von Funktionsparametern

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
King Leo - Martin Oberzal
Guest





PostPosted: Sat Nov 08, 2003 1:39 am    Post subject: Reihenfolge von Funktionsparametern Reply with 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?

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





PostPosted: Sat Nov 08, 2003 2:31 am    Post subject: Re: Reihenfolge von Funktionsparametern Reply with quote




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





PostPosted: Sat Nov 08, 2003 7:07 am    Post subject: Re: Reihenfolge von Funktionsparametern Reply with quote



"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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.