Forum: Mikrocontroller und Digitale Elektronik Frage zum initialen Rückgabewert von Funktionen in ANSI-C


von Zapzarapp (Gast)


Lesenswert?

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

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

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

von Frank K. (fchk)


Lesenswert?

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

von Zapzarapp (Gast)


Lesenswert?

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 ?

von Erich (Gast)


Lesenswert?

Deine Frage macht immer noch keinen Sinn.

Du solltest einen C Programmier Grundkurs belegen.

von Frank K. (fchk)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.