Rekursive Fakultät
-
ooh stimmt
danke volkard
-
volkard schrieb:
die klammern bei return sind sehr unüblich.
Sind sie gar nicht! :xmas2:
-
prosit schrieb:
volkard schrieb:
die klammern bei return sind sehr unüblich.
Sind sie gar nicht! :xmas2:
ok, sie sind seltsamerweise üblich bei wahren meistern und bei manchen zumeist veralteten (zum beispiel daran erkennbar, daß struktogramme vorkommen) C-büchern.
wie die C-bücher dazu kommen, ist mir ein rätsel. die wahren meister sind nur konsequent mit return (0), denn sie sagen auch new(int) und delete(p) und nennen die operatoren new und delete funktionen. warum sollte dann return nicht auch eine funktion sein? und um die return-funktion aufzurufen, braucht man nunmal klammern.
-
volkard schrieb:
und um die return-funktion aufzurufen, braucht man nunmal klammern.
Aber wie ist den das return der return-funktion implementiert? Das gibt ja ein rekursives endlos return
-
hehe schrieb:
Aber wie ist den das return der return-funktion implementiert? Das gibt ja ein rekursives endlos return
return ist eine void-Funktion.
-
Bashar schrieb:
hehe schrieb:
Aber wie ist den das return der return-funktion implementiert? Das gibt ja ein rekursives endlos return
return ist eine void-Funktion.
Aber return muss doch den übergebenen Parameter returnen.
-
volkard schrieb:
ok, sie sind seltsamerweise üblich bei wahren meistern und bei manchen zumeist veralteten (zum beispiel daran erkennbar, daß struktogramme vorkommen) C-büchern.
wie die C-bücher dazu kommen, ist mir ein rätsel. die wahren meister sind nur konsequent mit return (0), denn sie sagen auch new(int) und delete(p) und nennen die operatoren new und delete funktionen. warum sollte dann return nicht auch eine funktion sein? und um die return-funktion aufzurufen, braucht man nunmal klammern."if it looks like a function, it is a function!"
-
volkard schrieb:
die klammern bei return sind sehr unüblich.
Wenn ich mich recht erinnere, warst du es, der mir vor etwa drei Jahren diese Klammern abgewöhnt hatte
-
volkard schrieb:
warum sollte dann return nicht auch eine funktion sein?
weil if, goto, while, usw. auch keine sind.
-
hehe schrieb:
Aber return muss doch den übergebenen Parameter returnen.
Deswegen ist ja return auch keine Funktion, weder void noch sonstwas, sondern rein eine Anweisung auf Compilerebene.
Auf ASM- Ebene sieht das so aus, daß der Compiler beim Funktionsaufruf eine Adresse eines Stückchens reservierten Speichers mitgibt, in das der Rückgabetyp genau hineinpaßt. Die aufgerufene Funbktion klatscht da was rein und gibt ab. return macht genau das, also was von return bis zum Strichpunkt geht, wird ausgewertet und in den Speicher geschrieben, die Typenüberwachung macht der Compiler (bzw. castet automatisch, soweit möglich) und danach erfolgt der prozessorseitige return. Klammern brauchst Du daher nicht, wenn return eine Funktion wäre, müßtest Du sie ja mit return() aufrufen - und das Paradoxon wäre perfekt.
Spätestens ab der Endklammer der Funktion kommt zwangsweise der prozessorseitige return, dann steht halt Schrott im Rückgabewert und es ist Aufgabe des Compilers, da zu protestieren (zumindest eine warning absetzen).
Ich habe jetzt exemplarisch den Output meiner Compiler beschrieben, mit denen ich gerade arbeite, denke aber, daß das wohl immer so implementiert sein dürfte.
Happy new year!
-
quatsch der rückgabewert wird idr inem register reingetan bei x86 eax bei mips v0 usw
-
hehe schrieb:
Bashar schrieb:
hehe schrieb:
Aber wie ist den das return der return-funktion implementiert? Das gibt ja ein rekursives endlos return
return ist eine void-Funktion.
Aber return muss doch den übergebenen Parameter returnen.
Wieso das denn? return muss nur bewirken, dass die Funktion, in der das return steht, den Wert returnt.
-
dombtör schrieb:
quatsch der rückgabewert wird idr inem register reingetan bei x86 eax bei mips v0 usw
Ja klar, paßt da auch ein double rein?
-
Bashar schrieb:
Wieso das denn? return muss nur bewirken, dass die Funktion, in der das return steht, den Wert returnt.
Heute schon ordentlich gezecht
Nein, return macht mehr, es beendet ja auch die Funktion und damit kann es keine Funktion sein.
-
Bashar schrieb:
hehe schrieb:
Bashar schrieb:
hehe schrieb:
Aber wie ist den das return der return-funktion implementiert? Das gibt ja ein rekursives endlos return
return ist eine void-Funktion.
Aber return muss doch den übergebenen Parameter returnen.
Wieso das denn? return muss nur bewirken, dass die Funktion, in der das return steht, den Wert returnt.
Aber return ist doch eine Funktion, also muss die doch return aufrufen um etwas zu returnen.
PS: Das Assemblerzeugs interessiert doch keinen. Wir führen hier eine Endlose-Return-Funktion-Return-Beweisführung-Return-Dings. :p
-
hehe schrieb:
PS: Das Assemblerzeugs interessiert doch keinen. Wir führen hier eine Endlose-Return-Funktion-Return-Beweisführung-Return-Dings. :p
Daß Dich das ASM- Zeugs nicht interessiert, wollte ich auch schon immer wissen, nein, alle hier lechzten geradezu nach diesem Erguß.
Ich habe in meinen Ausführungen natürlich unterschlagen, daß Optimierungen durch den Compiler dazu führen können, daß Register für die Rückgabe herangezogen werden. Bei einer 8- Bit- Akkumaschine sind die Möglichkeiten dazu aber reichlich begrenzt.
So, und zuguterletzt: return gehört zu den Keywords, ist also mitnichten Funktion, dazu bedarf es weder einer Beweisführung noch einer Diskussion.
-
pointercrash() schrieb:
Nein, return macht mehr, es beendet ja auch die Funktion und damit kann es keine Funktion sein.
Jetzt kommen wir bitte nochmal auf den Boden der Tatsachen zurück...
-
Michael E. schrieb:
Jetzt kommen wir bitte nochmal auf den Boden der Tatsachen zurück...
Und wie gehts Dir da so? Ich hoffe, Du mußt nicht weinen, weil return keine Funktion ist
-
hehe schrieb:
Bashar schrieb:
hehe schrieb:
Bashar schrieb:
return ist eine void-Funktion.
Aber return muss doch den übergebenen Parameter returnen.
Wieso das denn? return muss nur bewirken, dass die Funktion, in der das return steht, den Wert returnt.
Aber return ist doch eine Funktion, also muss die doch return aufrufen um etwas zu returnen.
return muss gar nichts returnen, oder schreibst du
x = return(y);
? Das ist eine void-Funktion, die braucht kein weiteres return.
-
pointercrash() schrieb:
Michael E. schrieb:
Jetzt kommen wir bitte nochmal auf den Boden der Tatsachen zurück...
Und wie gehts Dir da so? Ich hoffe, Du mußt nicht weinen, weil return keine Funktion ist
Uns ist allen klar, dass return keine Funktion ist, aber wohl nicht allen, was Ironie ist.
[Edit] Was nicht heißt, dass return nicht als Funktion implementiert werden kann :p