Zitat Zitat von MagicMagor Beitrag anzeigen
Meine Frage ist jetzt, gibt es eine Konvention oder eine sonstige Regel im C-Standard die besagt, was i hier im Beispiel nach dem Funktionsaufruf für einen Wert haben soll, oder ist das unbestimmt und letztlich dem Zufall überlassen?
ANSI-C:
Zitat Zitat von http://flash-gordon.me.uk/ansi.c.txt
If a return statement without an expression is executed, and the
value of the function call is used by the caller, the behavior is
undefined. Reaching the } that terminates a function is equivalent to
executing a return statement without an expression.
Zitat Zitat von Ineluki Beitrag anzeigen
Das das nicht gaaanz das Selbe ist, war mir dann auch klar. MMn waere das auch ein klassischer Kandidat fuer ein -Wall gewesen, denn wann will man schon mal die zweite Interpretation haben ?
Na immer, wenn man sowas schreibt.
Das ist doch eine vollkommen valide Verkettung von Ausdrücken, wobei das Ergebnis des vorhergehenden Ausdrucks ein Operand des folgenden Ausdrucks ist. Vergleichsoperatoren liefern als Ergebnis immer einen Booleschen Wert, da bei dir die Variablen aber vom Typ double sind, muss der Boolesche Wert natürlich erst implizit in einen double-Wert konvertiert werden. Solange der ursprüngliche Wert nicht verändert und der Wertebereich nicht abgeschnitten wird, sind implizite Konvertierungen auch absolut in Ordnung und kein Compiler wird da eine Warnung generieren.
Meiner Meinung nach keine Warnung wert, da nur ein Verständnisproblem deinerseits.

Zitat Zitat von drunken monkey Beitrag anzeigen
Stimmt, da wäre es sinnvoll, zu meckern, genau wie bei:
Code:
bool a, b;
// ...
if (a = b)
    // ...
(Dort meckern ja afaik auch die meisten Compiler in den meisten Sprachen.)
Auch so eine Sache. Das ist vollkommen valides C/C++ und kein Compiler wird da eine Warnung ausgeben. Sogar das strikte Java erlaubt Zuweisungen innerhalb des Bedingungsblocks, wenn die Operanden vom Typ boolean sind.
Meiner Meinung nach ein typischer Anfängerfehler, falls "==" statt "=" gemeint war, manchmal zwar auch ein Tippfehler, bei erfahrenen Programmierern sollte so ein Fehler aber sofort ins Auge stechen, also auch keine Warnung wert, vor allem da valide und oft nützlich.