Supportnet Computer
Planet of Tech

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()

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!

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.

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!

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:-)

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' :-)

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:-)

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.


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'

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...

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'


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

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

Antwort 18 von semi

Du nimmst aber auch alles ernst oder?

Antwort 19 von TheProgrammer

jetzt kapier ich den sinn erst. löl
ironie

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: