Hallo,
ich habe hier mal eine Frage bezüglich von Funktionsrückgabewerten in C.
Bei Variablen ist ja eigentlich alles klar.
Wenn ich eine Variable deklariere, ihr aber keinen Wert zuweise kann die
Variable einen zufälligen Wert annehmen (evtl. Compilerabhängig ???)
Wenn ich eine Funktion schreibe, die einen INT Rückgabewert liefert,
diese jedoch bis zum Zeitpunkt X noch nicht aufgerufen habe, und dann
das ganze gleich in der if-Abfrage verwende, nach dem Motto,
if(Funktion())
{
Anweisungen;
}
was passiert dann ?
Also konkret: Hat eine Funktion mit Rückgabewert implizit vor dem Aufruf
einen definierten Rückgabewert wie z.B. Null, oder kann der Rückgabewert
auch zufällig sein ?
Danke für eure Antworten
Deine Frage macht keinen Sinn. Normale Variablen innerhalb von
Funktionen werden aber als Stackvariablen gefuehrt. Ohne dass die
Funktion gerufen wird, wird auch das Stackframe nicht angelegt und somit
gibt es keinen definierten Zustand. Das spielt aber auch kaum eine
Rolle, daher versteh ich Deine Frage nicht...
Nachtrag: Deine if-Anweisung wird nicht evaluiert bevor Deine Funktion
nicht vollstaendig abgearbeitet wurde. Das heisst es spielt keine Rolle
was zu einem Zeitpunkt davor geschehen ist, der Koerper wird erst
betreten, nachdem alles evaluiert wurde (was auch evaluiert werden
muss).
Bei
if (0 && Funktion())
{
}
wird Deine Funktion z.B. nicht gerufen werden ;)
Greets,
Michael
Zapzarapp schrieb:> if(Funktion())> {> Anweisungen;> }>> was passiert dann ?
Du rufst die Funktion ja in der if-Klausel auf. Du könntest genauso
schreiben:
_temp=Funktion();
if (_temp)
{
...
}
> Also konkret: Hat eine Funktion mit Rückgabewert implizit vor dem Aufruf> einen definierten Rückgabewert wie z.B. Null, oder kann der Rückgabewert> auch zufällig sein ?
Bevor eine Funktion nicht aufgerufen wird, liefert sie nichts zurück.
Wenn die Funktion aufgerufen wird, gibt sie mit return() einen Wert
zurück. Fehlt das return() in einer nicht als void definierten Funktion,
gibts zur Compilezeit einen Error.
fchk
Hallo,
in meiner if-Abfrage rufe ich die Funktion zum ersten mal auf. Sollte
nun innerhalb der Funktion eine Variable existieren, die zu diesem
Zeitpunkt nicht sinnvoll belegt ist, (weil evtl. nicht explizit
vorbelegt) würde die if-Abfrage also erst gar nicht aufgerufen werden ?
Zapzarapp schrieb:> Hallo,>> in meiner if-Abfrage rufe ich die Funktion zum ersten mal auf. Sollte> nun innerhalb der Funktion eine Variable existieren, die zu diesem> Zeitpunkt nicht sinnvoll belegt ist, (weil evtl. nicht explizit> vorbelegt) würde die if-Abfrage also erst gar nicht aufgerufen werden ?
Doch klar. Der Aufruf findet in jedem Fall statt. Nur das Ergebnis wäre
dann eventuell undefiniert.
fchk
Zapzarapp schrieb:> Sollte> nun innerhalb der Funktion eine Variable existieren, die zu diesem> Zeitpunkt nicht sinnvoll belegt ist, (weil evtl. nicht explizit> vorbelegt) würde die if-Abfrage also erst gar nicht aufgerufen werden ?
Sobald Du ein if hinschreibst, wird es auch ausgeführt.
Was die Funktion macht, ist völlig schnurz. Benutzt sie eine lokale
Variable, ohne sie zu initialisieren, bekommst Du eine Compilerwarnung.
Wer Warnungen ignoriert, ist selbst schuld.
Das if wird nur dann nicht ausgeführt, wenn der Compiler feststellt, daß
es immer wahr oder immer falsch ist.
Peter
Zapzarapp schrieb:> Hat eine Funktion mit Rückgabewert implizit vor dem Aufruf> einen definierten Rückgabewert wie z.B. Null, oder kann der Rückgabewert> auch zufällig sein ?
Er kann nicht nur, sondern er ist (mehr oder weniger) zufällig.
Funktionsrückgabewerte werden üblicherweise in einem (oder mehreren)
Registern zurückgegeben, und diese Register werden auch im Ablauf
der Funktion selbst für Zwischenergebnisse benutzt.
Zapzarapp schrieb:> Hallo,>> in meiner if-Abfrage rufe ich die Funktion zum ersten mal auf. Sollte> nun innerhalb der Funktion eine Variable existieren, die zu diesem> Zeitpunkt nicht sinnvoll belegt ist, (weil evtl. nicht explizit> vorbelegt) würde die if-Abfrage also erst gar nicht aufgerufen werden ?
Du versuchst hier einen Zusammenhang herzustellen, der nicht existiert.
Es ist eine Sache, was die Funktion zurückliefert. Es ist aber eine
andere Sache, was der Aufrufer der Funktion mit diesem Wert macht.
Der Rückgabewert ist das verbindende Glied zwischen den beiden. Das if
interessiert sich nicht dafür, wie die Funktion ihren Rückgabewert
ermittelt, es benutzt einfach nur diese Wert um die Entscheidung zu
treffen.
Die Funktion hingegen interessiert sich nicht daür, was mit dem Wert
passiert, den sie zurückgibt. Sie gibt einfach einen Wert zurück. Wenn
dieser Wert sich aus (zu diesem Zeitpunkt) undefinierten Werten
zusammensetzt, dann ist das eben ein zufälliger Wert.