Supportnet / Forum / Anwendungen(Java,C++...)
Wie Funktion in C++ beenden?
Frage
Hallo,
habe folgendes Problem, is vielleicht ganz einfach zu lösen, nur ich weiß halt nicht wie!
Ich habe ein kleines Programm mit Vc++ und dem MFC-Anwendungsassistenten geschrieben (zusammengeklickt). Dort sind 3 Eingabefelder und ein Knopf. Beim drücken des Knopfes wird eine Funktion ausgeführt, die auch gleich am Anfang überprüft, ob überhaupt etwas eingegeben wurde. Und wenn nix eingegeben wurde, soll die Funktion beendet werden. Nur wie kann ich das erreichen? break funktioniert nicht, und goto (um einfach an das Ende der Funktion zu springen) ist nicht grad die beste Lösung oder?
Für einen kleinen Tipp wär ich dankbar
Antwort 1 von Pumuckel
versuch es mit return
Antwort 2 von mcda
versuche es mal mit
close()
close()
Antwort 3 von StF
am einfachsten "return 0" ans ende der funktion, oder da wo sie enden soll...
Antwort 4 von Cippy
Geht nicht, weil es eine void-Funktion ist, die darf doch gar keinen Wert zurückgeben! Oder soll ich mal return; probieren? Moment...
Tatsache, es geht, dank sei mit euch!
Tatsache, es geht, dank sei mit euch!
Antwort 5 von Pisser
Ist ja lustig. STF unser Informatiker:-)
@Chippy eine Funktion endet sobald alle Anweisungen innerhalb der Funktion durchlaufen sind. Daher musst du gar nix machen, denn sie endet von selbst, es sei denn du hast eine Endlosschleife programmiert, dann gibst verschiedene Möglichkeiten herauszuspringen, z.B. irgendwann dann wenn eine Bedignung erfüllt ist.
@Chippy eine Funktion endet sobald alle Anweisungen innerhalb der Funktion durchlaufen sind. Daher musst du gar nix machen, denn sie endet von selbst, es sei denn du hast eine Endlosschleife programmiert, dann gibst verschiedene Möglichkeiten herauszuspringen, z.B. irgendwann dann wenn eine Bedignung erfüllt ist.
Antwort 6 von StF
@P i s s e r
in bestimmten Situationen / Anwendungsfällen ist es sehr wohl möglich und auch sinnvoll aus einer void-fkt mit nem return rauszuspringen, aber das lernst du sicher noch!
in bestimmten Situationen / Anwendungsfällen ist es sehr wohl möglich und auch sinnvoll aus einer void-fkt mit nem return rauszuspringen, aber das lernst du sicher noch!
Antwort 7 von Pisser
Also ich geb dir hier mal meine Quelle C/C++ Professional Programmieren Kompendium Markt & Technik Seite 575. Das beste Buch neben Oreilly Professional C++ das ich kenne, da steht:
"Funktionen, die keinen Wert zurückliefern, werden mit dem Rückgabewert void deklariert. Eine solche Funktion darf selbstverständlich keine return-Anweisung beeinhalten."
Mir ist auch kein Compiler bekannt, der das tolerieren würde.
Jetzt bist du dran mir ein Gegenbeispiel zu nenen, bzw. eine Quelle, die bestätigt, dass man bei einer void Funktion return verwenden kann.
Ich programmiere schon Jahre lang in C/C++ aber was du erzählst wäre mir total neu:-)
"Funktionen, die keinen Wert zurückliefern, werden mit dem Rückgabewert void deklariert. Eine solche Funktion darf selbstverständlich keine return-Anweisung beeinhalten."
Mir ist auch kein Compiler bekannt, der das tolerieren würde.
Jetzt bist du dran mir ein Gegenbeispiel zu nenen, bzw. eine Quelle, die bestätigt, dass man bei einer void Funktion return verwenden kann.
Ich programmiere schon Jahre lang in C/C++ aber was du erzählst wäre mir total neu:-)
Antwort 8 von semi
Dass man eine Funktion/Prozedur nicht mit 'return' beenden sollte lese ich zum ersten mal.
Ist zwar kein guter Programmierstill mehrere Austrittspunkte innerhalb einer Funktion zu definieren (ist schwieriger nachvollziehbar, wenn der Code länger ist) aber es kommt auf den Anwendungsfall an.
Und echte Programmierer haben auch keine Angst vor 'goto' :-)
Ist zwar kein guter Programmierstill mehrere Austrittspunkte innerhalb einer Funktion zu definieren (ist schwieriger nachvollziehbar, wenn der Code länger ist) aber es kommt auf den Anwendungsfall an.
Und echte Programmierer haben auch keine Angst vor 'goto' :-)
Antwort 9 von Pisser
"""Dass man eine Funktion/Prozedur nicht mit 'return' beenden sollte lese ich zum ersten mal."""
Hat ja auch keiner gesagt, nur dass man keine Funktion mit return beenden kann, die als "void" deklariert ist.
Ich weis ja nicht was ihr für compiler habt:-)
Hat ja auch keiner gesagt, nur dass man keine Funktion mit return beenden kann, die als "void" deklariert ist.
Ich weis ja nicht was ihr für compiler habt:-)
Antwort 10 von thomasn1975
Zitat:
"Funktionen, die keinen Wert zurückliefern, werden mit dem Rückgabewert void deklariert. Eine solche Funktion darf selbstverständlich keine return-Anweisung beeinhalten."
Mir ist auch kein Compiler bekannt, der das tolerieren würde.
"Funktionen, die keinen Wert zurückliefern, werden mit dem Rückgabewert void deklariert. Eine solche Funktion darf selbstverständlich keine return-Anweisung beeinhalten."
Mir ist auch kein Compiler bekannt, der das tolerieren würde.
Das ist Blödsinn!
Jeder Compiler muss Funktionen wie
void foo(int x)
{
if ( x < -359 || x > 359 ) {
printf("illegal parameter!");
return;
}
printf("%d\n",x);
}
sowie
void foo(void)
{
return;
printf("unreachable code here.\n");
}
kompilieren. Im zweiten Fall schmeißt der Compiler eine Warnung raus, dass die Codezeile nie erreicht wird.
Antwort 11 von Pisser
Echt jetzt:-)Ich hab auch nicht geschrieben, dass man das nicht kompilieren kann, nur das es nicht toleriert wird.
Guck mal hier, das passiert wenn du deine erste function mal schnelle einbaust und kompilierst:
test.c:12: warning: type mismatch with previous implicit declaration
test.c:7: warning: previous implicit declaration of `foo'
test.c:12: warning: `foo' was previously implicitly declared to return `int'
Guck mal hier, das passiert wenn du deine erste function mal schnelle einbaust und kompilierst:
test.c:12: warning: type mismatch with previous implicit declaration
test.c:7: warning: previous implicit declaration of `foo'
test.c:12: warning: `foo' was previously implicitly declared to return `int'
Antwort 12 von StF
so mein BSP.:
//////////////////////////////////////////////
Aus void-Funktionen kann mit return ohne Parameter zurückgekehrt werden; Bsp:
void GreetMe()
{
string s;
cin >> s;
if(s == "?")
{
cout << "wer?" << endl;
return;
}
cout << "Hallo " << s << endl;
}
Am Ende eines Funktionsrumpfes
/////////////////////////////////////////////
Quelle: http://www.informatik.fh-muenchen.de/~schieder/programmieren-1-ws96-97/result.html
Viel Spass damit...
//////////////////////////////////////////////
Aus void-Funktionen kann mit return ohne Parameter zurückgekehrt werden; Bsp:
void GreetMe()
{
string s;
cin >> s;
if(s == "?")
{
cout << "wer?" << endl;
return;
}
cout << "Hallo " << s << endl;
}
Am Ende eines Funktionsrumpfes
/////////////////////////////////////////////
Quelle: http://www.informatik.fh-muenchen.de/~schieder/programmieren-1-ws96-97/result.html
Viel Spass damit...
Antwort 13 von thomasn1975
Zitat:
test.c:12: warning: type mismatch with previous implicit declaration
test.c:7: warning: previous implicit declaration of `foo'
test.c:12: warning: `foo' was previously implicitly declared to return `int'
test.c:12: warning: type mismatch with previous implicit declaration
test.c:7: warning: previous implicit declaration of `foo'
test.c:12: warning: `foo' was previously implicitly declared to return `int'
guck mal in dein buch unter "funktionen überladen". in diesem fall warnt dich der compiler davor, dass die überladene funktionen einen anderen variablentyp zurückliefert. das hat nichts mit dem return-statement zu tun. spaßeshalber kannst du ja foo() und foo_2() umbenennen.
Antwort 14 von dingelchendingelchen
hi
also im kernighan & ritchi steht drin das man in C void - funktionen mit return verlassen darf. und wenns da drin steht dann darf man das auch.
gruss
Antwort 15 von TheProgrammer
[ZENS] weiss ja nicht welchen Kompiler oder so du benutzt aber wenn ich in mein Visual Studio das rein hacke funzt alles.
void N00b()
{
return;
MessageBox("Dieser Code wird nicht mehr ausgeführt !");
}
und es wird soweit ich weiss auch von allen anderen Compilern "toleriert"
@semi
"Goto" sollte man nicht mehr einsetzen. Es ist ein schlechter Programmier-Stil. Dafür gibts ja schliesslich die Funktion
MFG
TheProgrammer
void N00b()
{
return;
MessageBox("Dieser Code wird nicht mehr ausgeführt !");
}
und es wird soweit ich weiss auch von allen anderen Compilern "toleriert"
@semi
"Goto" sollte man nicht mehr einsetzen. Es ist ein schlechter Programmier-Stil. Dafür gibts ja schliesslich die Funktion
MFG
TheProgrammer
Antwort 16 von semi
Warum? Ich verwende nur noch 'goto'. Am liebsten mit FAR-Labels :-)
Antwort 17 von TheProgrammer
Womit programmierst denn du ?? C oder C++
In C++ sollte man wie gesagt kein "goto" benutzen
In C++ sollte man wie gesagt kein "goto" benutzen
Antwort 18 von semi
Du nimmst aber auch alles ernst oder?
Antwort 19 von TheProgrammer
jetzt kapier ich den sinn erst. löl
ironie
ironie

