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 

Undefiniertes Verhalten?
Goto page 1, 2  Next
 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Jörg Baumann
Guest





PostPosted: Sun Nov 02, 2003 12:54 pm    Post subject: Undefiniertes Verhalten? Reply with quote



Ist

index = index != 0 ? --index: 0;

undefiniertes Verhalten?

--
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
Robert W. Kuhn
Guest





PostPosted: Sun Nov 02, 2003 1:15 pm    Post subject: Re: Undefiniertes Verhalten? Reply with quote



Jörg Baumann schrieb:

Quote:
Ist

index = index != 0 ? --index: 0;

undefiniertes Verhalten?


Jupp:
http://groups.google.com/groups?as_q=sequenzpunkt&ie=UTF-8&oe=UTF-8&as_ugroup=de.comp.lang.c&lr=&hl=de

Tschau - Robert

--
vertrau
voraus voraus

--
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
Jörg Baumann
Guest





PostPosted: Sun Nov 02, 2003 2:54 pm    Post subject: Re: Undefiniertes Verhalten? Reply with quote



Robert W. Kuhn wrote:


Quote:
Jupp:

http://groups.google.com/groups?as_q=sequenzpunkt&ie=UTF-8&oe=UTF-8&as_ugroup=de.comp.lang.c&lr=&hl=de


Aber ?: ist doch ein Sequenzpunkt.
Analog zu
http://groups.google.com/groups?q=sequenzpunkt+group:de.comp.lang.c+%3F&hl=de&lr=&ie=UTF-8&oe=UTF-8&selm=yyw1xvauimc.fsf%40winter.inter-i.wohnheim.uni-mainz.de&rnum=8
wäre mein Beispiel dann aber kein undefiniertes Verhalten.

--
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
Georg Maaß
Guest





PostPosted: Sun Nov 02, 2003 3:01 pm    Post subject: Re: Undefiniertes Verhalten? Reply with quote

Robert W. Kuhn wrote:
Quote:
Jörg Baumann schrieb:


Ist

index = index != 0 ? --index: 0;

undefiniertes Verhalten?



Jupp:
http://groups.google.com/groups?as_q=sequenzpunkt&ie=UTF-8&oe=UTF-8&as_ugroup=de.comp.lang.c&lr=&hl=de

Ich seh da nix zum bedingten Ausdrucks-Operator. Setzt der bedingte
Ausdrucks-Operator einen Seqenzpunkt, oder setzt er keinen? Kann es also
sein, daß vor dem Vergleich bereits dekrementiert wurde?
--
Georg Maaß - bioshop.de D-76187 Karlsruhe, Hertzstraße 180a
HTML, XML / JavaScript, C++, Java, PHP, VB / CGI, JSP, ASP, ASP.net
- The ultimative DHTML engine: http://gml-modul.sourceforge.net -
http://sourceforge.net/projects/gml-modul

--
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
Jörg Baumann
Guest





PostPosted: Sun Nov 02, 2003 3:30 pm    Post subject: Re: Undefiniertes Verhalten? Reply with quote

Georg Maaß wrote:

Quote:
Ich seh da nix zum bedingten Ausdrucks-Operator. Setzt der bedingte
Ausdrucks-Operator einen Seqenzpunkt, oder setzt er keinen? Kann es also
sein, daß vor dem Vergleich bereits dekrementiert wurde?

Soweit ich den Standard verstehen ist das "?" in "a ? b : c" ein
sequencepoint (§1.9.1Cool.

Zusammen mit §15.6 gibt das:
Auswertung von A, sequencepoint, Auswertung von b oder c, Zuweisung

Aber die Zuweisung ist ja generell kein sequencepoint.

Ist dann "i = doInc? i++: i--;" für "(doInc == true)" wie "i = i++;" (=UB)
oder wie "i = ident(i++);" zu behandeln (mit "template<typename T> T
indent(T t) {return t;}").
Für überladenen operator++ ist es ja einfach da dann ++ ein eigener
sequencepoint ist (und wir indent mit etwaigen Nebeneffekten weglassen
können).
Aber für builtins?

--
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: Sun Nov 02, 2003 4:57 pm    Post subject: Re: Undefiniertes Verhalten? Reply with quote

"Jörg Baumann" <joerg.baumann (AT) stud (DOT) uni-erlangen.de> schrieb:

Quote:
index = index != 0 ? --index: 0;
undefiniertes Verhalten?

Definitiv.

--
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: Sun Nov 02, 2003 4:59 pm    Post subject: Re: Undefiniertes Verhalten? Reply with quote

"Jörg Baumann" <joerg.baumann (AT) stud (DOT) uni-erlangen.de> schrieb:

Quote:
Aber ?: ist doch ein Sequenzpunkt.

Einen Operator mit 3 Operanden einfach als "Sequenzpunkt" zu
bezeichnen, kann nur zu Mißverständnissen führen. Ja, da ist
(genau) ein Sequenzpunkt nach der Auswertung des ersten Ope-
randen (dem links vom »?«).

--
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: Sun Nov 02, 2003 5:00 pm    Post subject: Re: Undefiniertes Verhalten? Reply with quote

"Rolf Magnus" <ramagnus (AT) t-online (DOT) de> schrieb:

Quote:
index = index != 0 ? --index: 0;
undefiniertes Verhalten?

Definitiv.

Warum?

Weil es keinen Sequenzpunkt zwischen Dekrement und Zuweisung gibt.

--
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
Rolf Magnus
Guest





PostPosted: Sun Nov 02, 2003 5:55 pm    Post subject: Re: Undefiniertes Verhalten? Reply with quote

Markus Schaaf wrote:

Quote:
"Jörg Baumann" <joerg.baumann (AT) stud (DOT) uni-erlangen.de> schrieb:

index = index != 0 ? --index: 0;
undefiniertes Verhalten?

Definitiv.

Warum?

--
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
Thomas Maeder
Guest





PostPosted: Sun Nov 02, 2003 7:13 pm    Post subject: Re: Undefiniertes Verhalten? Reply with quote

Jörg Baumann <joerg.baumann (AT) stud (DOT) uni-erlangen.de> writes:

Quote:
Aber ?: ist doch ein Sequenzpunkt.

Nur das ? davon. Nachher wird ohne dazwischen liegenden Sequenzpunkt
dekrementiert und zugewiesen.

--
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
Hendrik Belitz
Guest





PostPosted: Fri May 07, 2004 1:45 pm    Post subject: Re: Undefiniertes Verhalten? Reply with quote

Mark Henning wrote:

Quote:
Nun wurde mir von jemandem gesagt, die Zeile

*(++pfSources) = -(*(++pfSources) = 1);

sei so nicht O.K. -> undefiniertes Verhalten.

Stimmt das so? Ich dachte immer, solche Ausdrücke würden grundsätzlich
von rechts nach links aufgelöst werden, was zur Folge hätte, dass es
eben kein undefinierter Ausdruck wäre?

Ein Ausdruck ja, aber Du hast da ja noch eine Zuweisung zwischen. Ob
nun zuerst der Pointer vor dem Gleichheitszeichen oder der hinter dem
Gleichheitszeichen inkrementiert wird, das ist tatsächlich nicht definiert.
--
To get my real email adress, remove the two onkas
--
Dipl.-Inform. Hendrik Belitz
Central Institute of Electronics
Research Center Juelich

--
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
Horst Kraemer
Guest





PostPosted: Fri May 07, 2004 2:21 pm    Post subject: Re: Undefiniertes Verhalten? Reply with quote

On Thu, 06 May 2004 13:17:13 +0200, Mark Henning <mh (AT) homolog (DOT) de>
wrote:

Quote:
Nun wurde mir von jemandem gesagt, die Zeile

*(++pfSources) = -(*(++pfSources) = 1);

sei so nicht O.K. -> undefiniertes Verhalten.

Stimmt das so?

Ja. Dieses Ausdruck ist Selbstmord ;-)

Quote:
Ich dachte immer, solche Ausdrücke würden grundsätzlich
von rechts nach links aufgelöst werden, was zur Folge hätte, dass es
eben kein undefinierter Ausdruck wäre?

Vielleicht verwechselst Du es mit Java. Dort werden Ausdruecke
allerdings immer von links nach rechts aufgeloest.
--
Horst

--
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
Stefan Reuther
Guest





PostPosted: Fri May 07, 2004 6:09 pm    Post subject: Re: Undefiniertes Verhalten? Reply with quote

Mark Henning wrote:
Quote:
Nun wurde mir von jemandem gesagt, die Zeile

*(++pfSources) = -(*(++pfSources) = 1);

sei so nicht O.K. -> undefiniertes Verhalten.

Stimmt.

Quote:
Stimmt das so? Ich dachte immer, solche Ausdrücke würden grundsätzlich
von rechts nach links aufgelöst werden,

Eine solche Regel gibt es nicht. Der Compiler ist vollkommen frei, den
Ausdruck in einer Reihenfolge seiner wahl zu bewerten. Das einzige,
woran er sich halten muss, sind Sequenzpunkte. Das sind, grob gesagt,
Semikolons, Kommaoperator, ||, && und ?:, sowie Funktionsaufrufe. Dein
Code enthält keine Sequenzpunkte.

Du velwechserst das vielleicht damit, dass auf vielen (nicht allen)
Compilern die Argumente von rechts nach links ausgewertet werden. Das
ist aber ebenfalls kein "Gesetz". Die einzige Regeln für Parameter einer
Funktion ist, dass die Parameter ausgewertet sein müssen, bevor die
Funktion aufgerufen wird. In welcher Reihenfolge das geschieht, ist
egal. Siehe auch <c0e91s.uk.1 (AT) stefan (DOT) msgid.phost.de>.


Stefan

--
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
Thomas Maeder
Guest





PostPosted: Fri May 07, 2004 10:05 pm    Post subject: Re: Undefiniertes Verhalten? Reply with quote

Mark Henning <mh (AT) homolog (DOT) de> writes:

Quote:
Hat das einen tieferen Grund? Oder ist das "einfach so" undefiniert
geblieben?

Die Compilerhersteller sollen nicht am Optimieren gehindert werden.

--
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
Raymond Haeb
Guest





PostPosted: Sat May 08, 2004 2:51 pm    Post subject: Re: Undefiniertes Verhalten? Reply with quote

Es begab sich, daß Stefan Reuther schrieb:
Quote:
Eine solche Regel gibt es nicht. Der Compiler ist vollkommen frei, den
Ausdruck in einer Reihenfolge seiner wahl zu bewerten. Das einzige,
woran er sich halten muss, sind Sequenzpunkte. Das sind, grob gesagt,
Semikolons, Kommaoperator, ||, && und ?:, sowie Funktionsaufrufe. Dein
Code enthält keine Sequenzpunkte.

Wie ist das mit den Sequenzpunkten zu verstehen? Ist sowas definiertes
Verhalten:

obj.get_next_item() = obj.get_next_item() + 42;


Raymond

--
Bitte kein BCC an mich, wegen Swen-Filter.
(Positivliste für To: und Cc:)

--
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
Goto page 1, 2  Next
Page 1 of 2

 
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.