Gast
#2082594
Hallo! Wie ist richtig implementiert?
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
oder
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
wobei
1 | |
2 | |
3 | |
4 | |
5 | |
Danke. Gruß Peter
|
Anzeige
|
Wie ist es richtig programmiert?
Gast
#2082594
Hallo! Wie ist richtig implementiert?
oder
wobei
Danke. Gruß Peter
Gast
#2082597
Hallo Peter, Deine Test-Funktion ist void. Hat also keinen Rückgabewert und somit auch kein Return. Grüße Step
Gast
#2082598
Peter R. schrieb: > Wie ist richtig implementiert? Ist das ne Schulaufgabe? Überleg mal, was void für Rückgabewerte haben kann. :-)
Gast
#2082600
Was sagt denn dein C-Buch zu diesem Thema? Wenn eine Funktion void als Rückgabeparameter hat, wie sollte dann ihr Rückgabewert und damit mit der Parameter von return aussehen? Oliver
Gast
#2082601
Nachtrag: Wenn dir gar nichts zu diesem Thema einfällt, frag deinen Compiler. Oliver
Gast
#2082610
selbst wenn dein return wert (int) ist, gibt es kein "richtig" oder "falsch". Manchmal macht es der Übersicht halber Sinn, einen func call in das return zu packen, manchmal nicht.
Der Compiler macht nichts anderes, als dir hier eine Variable (in welcher Form auch immer, idR. Register) "einzufügen", in welcher der Rückgabewert von SendChar steht, wenn SendChar beendet ist. Dieser Wert wird dann von fputc zurückgegeben. VG, /th.
Gast
#2082611
... und wenn dein compiler deinen 2. C block nicht anmeckert, such dir besser nen neuen :-)
Gast
#2082686
thorstendb schrieb: > ... und wenn dein compiler deinen 2. C block nicht anmeckert, such dir > besser nen neuen :-) Warum? Abgesehen von dem "..." ist das völlig korrektes C++. Rolf Magnus schrieb: > Warum? Abgesehen von dem "..." ist das völlig korrektes C++. Das bezweifle ich:
Gast
#2082701
Rufus Τ. Firefly schrieb: > Rolf Magnus schrieb: >> Warum? Abgesehen von dem "..." ist das völlig korrektes C++. > > Das bezweifle ich: Ist aber so. Man beachte, daß ich "C++" schrieb, nicht "C". Da wäre das nämlich ein Fehler. > void Test(int a, char b) > { > char x; > ... > > return Aufruf(&a, &x); // was wird hier zurückgegeben? Nichts. > } Rufus Τ. Firefly schrieb:
Na, ein void halt. ;-) Da auch "Aufruf" den Return-Typ void hat, ist das tatsächlich völlig korrekt in C++.
Gast
#2082708
@all: Das void kein Rückgabewert hat ist mir bekannt. Demnach sollte theoretisch auch das erlaubt sein:
(gänzlich ohne "return") @thorstendb: Bei deinen Beispielen erwartet der Compiler einen Rückgabewert. Bei void nicht... @Remote One: Dein Link verweist auf das C#-Programmierhandbuch.
Gast
#2082711
thorstendb schrieb: > ... und wenn dein compiler deinen 2. C block nicht anmeckert, such dir > besser nen neuen :-) Hm, dann muss ich jetzt wohl den gcc 'wegwerfen'. Gibt bei mir noch nicht mal eine Warnung, scheint also korrektes C zu sein.
Gast
#2082717
Peter R. schrieb: > Demnach sollte > theoretisch auch das erlaubt sein: > ... Ist es auch praktisch. Aber trotzdem solltest du jetzt erst einmal klarstellen, um welche Sprache es nun eigentlich geht: C, C++, C#, ... Oliver
Gast
#2082721
Oliver schrieb: > Aber trotzdem solltest du jetzt erst einmal klarstellen, um welche > Sprache es nun eigentlich geht: C, C++, C#, ... C
Gast
#2082724
du hast recht, man kann tatsächlich (void) return-en. Ich hatte eher etwas wie dieses erwartet:
Dass man einen (void *) zurückgibt, macht Sinn, das ist tatsächlich ein pointer, vgl. malloc). Aber wozu sollte man einen (void) zurückgeben? Was "kommt" da? Was soll das? **verwirrt**
Gast
#2082727
... oder macht das gar keinen Sinn, sondern ist lediglich Typenkorrekt?
Gast
#2082729
Das hier hingegen: thorstendb schrieb: > return(status); Macht jedoch nie Sinn und zeugt nur von einem mangelhaften Sprachverständniss, obwohl oft gesehen... "return" ist ein Operator, keine Funktion o.Ä. return(42) + 23; macht dasselbe wie return 42 + 23; und return (42 + 23); und das ist was anderes als return 42;
Gast
#2082732
tested schrieb: > Hm, dann muss ich jetzt wohl den gcc 'wegwerfen'. > Gibt bei mir noch nicht mal eine Warnung, scheint also korrektes C zu > sein. >../test.c:20: warning: ISO C forbids 'return' with expression, in >function returning void Soviel dazu. Allerdings kommt die Warnung nur mit -pedantic, und wer ist das schon ;) Oliver
Gast
#2082738
tested schrieb: > scheint also korrektes C zu sein. Daraus, daß gcc (oder irgendein beliebiger Compiler) es akziptiert, kann man nicht zwingend darauf schließen, daß der Code korrekt ist. Die beste Referenz dazu ist noch Comeau. Mit dessen online-Compiler kann man sowas auch mal testen, ohne den gleich zu kaufen. Siehe http://www.comeaucomputing.com/tryitout/ Und der sagt dann im C-Modus auch prompt:
thorstendb schrieb: > Dass man einen (void *) zurückgibt, macht Sinn, das ist tatsächlich ein > pointer, vgl. malloc). Aber wozu sollte man einen (void) zurückgeben? Das würde in C tatsächlich nichts bringen. In C++ wurde das erlaubt, vor allem für Templates. Da ist es geschickt, wenn man void nicht als Sonderfall behandeln muß, sondern einfach den Rückgabewert einer Funktion weiterreichen kann, selbst wenn der void ist.
Gast
#2082739
thorstendb schrieb: > return((void) 42) Sowas mache ich doch gar nicht!? 6to4 schrieb: > Das hier hingegen: > > thorstendb schrieb: >> return(status); > > Macht jedoch nie Sinn und zeugt nur von einem mangelhaften > Sprachverständniss, obwohl oft gesehen... Verstehe nicht, wo da der Fehler liegen sollte...
Gast
#2082748
> zeugt nur von einem mangelhaften Sprachverständniss
nope, hier handelt es sich nicht um "mangelhaftes Sprachverständniss",
sondern nur darum, dass ich es schöner lesbar finde, und damit sicher
nicht der einzige bin.
Gast
#2082750
> thorstendb schrieb: > > return((void) 42) > Sowas mache ich doch gar nicht!? ...war nur ein Test der Möglichkeiten. Nachtrag: > zeugt nur von einem mangelhaften Sprachverständniss Ich finde es echt krass, wie schnell man hier niedergemacht wird... Peter R. schrieb: >> Macht jedoch nie Sinn und zeugt nur von einem mangelhaften >> Sprachverständniss, obwohl oft gesehen... > > Verstehe nicht, wo da der Fehler liegen sollte... Das hier: () ist der Operator für Funktionsaufrufe. Außerdem werden runde Klammern für arithmetische Ausdrücke verwendet, wie in der Mathematik: (a + 3 ) / 2 Und zuguterletzt werden die Klammern auch für Kontrollausdrücke verwendet, wie bei if() und switch(). Bei "return status;" wird weder eine Funktion aufgerufen noch ein arithmetischer Ausdruck geklammert noch sonstwas. Wo Klammern keinen Sinn haben, darf man sie ruhig guten Gewissens nicht verwenden :-)
Gast
#2083921
Mark Brandis schrieb: > Peter R. schrieb: >>> Macht jedoch nie Sinn und zeugt nur von einem mangelhaften >>> Sprachverständniss, obwohl oft gesehen... Also nur noch mal zur Klarstellung: Das habe ich nicht gesagt! Mark Brandis schrieb: > Wo Klammern keinen > Sinn haben, darf man sie ruhig guten Gewissens nicht verwenden :-) Aber schaden tun sie doch auch nicht wirklich... Wenn es also für ihn übersichtlicher ist, spricht IMHO nichts dagegen.
Gast
#2083926
Peter R. schrieb: >> Wo Klammern keinen >> Sinn haben, darf man sie ruhig guten Gewissens nicht verwenden :-) > Aber schaden tun sie doch auch nicht wirklich... > Wenn es also für ihn übersichtlicher ist, spricht IMHO nichts dagegen. Du wolltest Kritik und dann kannst du dir hier in diesem Forum sicher sein, dass du sie bekommst. ;-) Ich würde die Klammern selbst auch nur dann hinter ein return setzen, wenn es nötig ist. Es ist aber zu bezweifeln, dass jemand anfängt nach der Funktion return() zu suchen und selbst wenn, dann sollte er das C-Buch nochmal von vorne beginnen. ;-) Peter R. schrieb: > Aber schaden tun sie doch auch nicht wirklich... Schaden nicht. Sie bringen aber auch nichts. Du schreibst ja auch nicht
Gast
#2085403
teto schrieb: > Du wolltest Kritik und dann kannst du dir hier in diesem Forum sicher > sein, dass du sie bekommst. Ich wollte keine Kritik, außer konstruktive. teto schrieb: > Es ist aber zu bezweifeln, dass jemand anfängt nach > der Funktion return() zu suchen und selbst wenn, dann sollte er das > C-Buch nochmal von vorne beginnen. Selbt ich hätte nicht nach einer Funktion return gesucht. Und das hat was zu bedeuten! ;) Karl Heinz Buchegger schrieb: > Schaden nicht. Sie bringen aber auch nichts. Richtig. Dennoch finde ich es mehr als übertrieben gleich von "mangelhaften Sprachverständniss" zu sprechen!
Gast
#2085408
Peter R. schrieb: > @Remote One: > > Dein Link verweist auf das C#-Programmierhandbuch. Mir ging es auch eher um diesen Abschnitt: "Methoden können dem Aufrufer einen Wert zurückgeben. Wenn der Rückgabetyp (der vor dem Methodennamen angezeigte Typ) nicht void ist, kann die Methode den Wert mithilfe des return-Schlüsselworts zurückgeben. Durch eine Anweisung, die aus dem return-Schlüsselwort und einem Wert besteht, der mit dem Rückgabetyp übereinstimmt, wird der Wert an den Methodenaufrufer zurückgegeben. Das return-Schlüsselwort beendet außerdem die Ausführung der Methode. Wenn der Rückgabetyp void ist, können Sie mit einer return-Anweisung ohne Wert die Ausführung der Methode beenden. !
Gast
#2085451
Und der Vollständigkeit wegen - das sagt der ANSI Standard:
Gast
#2085519
Peter R. schrieb: > teto schrieb: >> Es ist aber zu bezweifeln, dass jemand anfängt nach >> der Funktion return() zu suchen und selbst wenn, dann sollte er das >> C-Buch nochmal von vorne beginnen. > > Selbt ich hätte nicht nach einer Funktion return gesucht. Und das hat > was zu bedeuten! ;) Umgekehrt kann es aber sein, daß jemand nach return-Anweisungen in einer Funktion sucht und auf den ersten Blick eine übersieht, weil er sie beim Überfliegen aufgrund der Klammern als Funktionsaufruf fehlinterpretiert. Erst beim zweiten Hinsehen merkt er dann, daß es gar kein Funktionsaufruf ist, sondern ein als solcher getarntes return. Man könnte sich zur Verwirrung auch den Spaß machen, eine Funktion retrun zu schreiben, die am Ende jeder Funktion aufgerufen wird ;-) remote1 schrieb: >> Dein Link verweist auf das C#-Programmierhandbuch. > > Mir ging es auch eher um diesen Abschnitt: Der ist aber für C nicht relevant. > "Methoden ... gibt es in C nicht. Ich könnte auch aus der C++-Norm die Passage zitieren, die zeigt, daß es durchaus erlaubt ist, das "Ergebnis" einer void zurückliefernden Funktion selbst per return weiterzuleiten. Ist aber für C genausowenig relevant.
Gast
#2085536
Rolf Magnus schrieb: > Man könnte sich zur Verwirrung auch den Spaß machen, eine Funktion > retrun zu schreiben, die am Ende jeder Funktion aufgerufen wird ;-) Bring mich nicht auf dumme Gedanken! Wie erwartet gehts leider nicht: > error: syntax error before "return" Oder ist der Tippfehler (retRun) Absicht? Aber wenn man jemanden (besonders Anfänger!) ärgern will: Opfer arbeitet an einem "hochkomplexen" Projekt (stark gekürzt ;-)):
Alles prima.
Jetzt folgende Zeile gut verstecken (in irgendeinem Header z.B.)
> #define return Sleep(1000); return
und plötzlich ist das Programm seeeeehr langsam...
SCNR
Gast
#2085542
meckermensch schrieb: > Rolf Magnus schrieb: >> Man könnte sich zur Verwirrung auch den Spaß machen, eine Funktion >> retrun zu schreiben, die am Ende jeder Funktion aufgerufen wird ;-) > Bring mich nicht auf dumme Gedanken! Wie erwartet gehts leider nicht: >> error: syntax error before "return" > Oder ist der Tippfehler (retRun) Absicht? Ja, der ist Absicht. Es sollte nur ein Funktionsname sein, der dem "return" möglichst ähnlich sieht. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|