Gehen Sie zu main() vom Benutzer definierte Funktion
Habe ich 3 Funktionen: my_fun1()
, my_fun2()
, und my_fun3()
.
main()
Anrufe my_fun1()
fordert my_fun2()
, die wiederum ruft my_fun3()
.
Auf einige vordefinierte Bedingung in my_fun3()
ich möchte mein Programm direkt wieder auf die main()
Funktion in der Zeile my_fun1()
genannt wurde.
Ist es möglich, direkt aus my_fun3()
zu main()
oder muss ich hinzufügen, einige Bedingungen zu my_fun2()
und my_fun1()
um dies zu erreichen?
InformationsquelleAutor A-A | 2011-07-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, es gibt einen Weg, direkt zu einer anderen Stelle in den code mit
longjmp
/setjmp
, aber ich werde mich nicht, Ihnen zu sagen, wie, weil es ein schrecklichen Idee. Ungefähr so schlecht wie es nur geht. So reden wir über gute Lösungen :-).Die naheliegendste Möglichkeit ist die Verwendung Ausnahmen. Wie diese:
Wenn Sie nicht möchten, verwenden Ausnahmen (was der Fall sein kann, können einige argumentieren, dass dies ein Missbrauch von Ausnahmen, wenn die Grund, zurück zu main ist nicht "außergewöhnlich") der nächste einfachste Weg ist, um
my_fun1
,my_fun2
, undmy_fun3
Rückgabewerte Bedeutung "fertig", lassen Sie uns sagen, einint
wo ein Wert von weniger als0
bedeutet "zurück zur Hauptseite". Ihr Anruf Struktur würde wie folgt Aussehen:InformationsquelleAutor Evan Teran
Ja, es ist möglich eine Ausnahme zu werfen und zu fangen, die in
main
. Aber verwenden Sie bitte nicht die Ausnahmen als Allgemeine control-flow-Mechanismus, das ist nicht das, was Sie sind für.Gibt es auch
setjmp
/longjmp
, aber code mit Ihnen ist sehr schwer zu Folgen.InformationsquelleAutor Fred Foo
Wieder von allen Funktionen oder werfen und fangen einer Ausnahme (nicht empfohlen, es sei denn, der Grund zu gehen, bis der stack ist wirklich Fehlersituation)
InformationsquelleAutor Mike Mozhaev
Einen sauberen Ansatz, ohne zu missbrauchen, Ausnahmen würden
#define
,void main
- haben Sie wirklich zu lehren, schlechte Praktiken?InformationsquelleAutor Hyperboreus
Scheint es, du kann Hinweis auf eine
goto
was schlecht ist.Nicht sehen Sie die Struktur Ihres Programms, können Sie erwägen eine Rückgabe boolescher Wert (z.B. eine fahne), die überprüft wird, nach der Rückkehr von Funktion #3, in dem überprüft wird, in #2, die dann zurückgegeben, eingecheckt #1, und kehrt dann zu
main()
.InformationsquelleAutor
Ist es möglich durch das werfen einer Ausnahme, wie larsmans sagte (obwohl nur C++). Es ist auch möglich, über setjmp()/longjmp(), die als eine Art Kreuz-Funktion goto-Anweisung.
Aber wenn das wirklich das design, die Sie wollen/brauchen, dann gibt es wahrscheinlich etwas falsch mit Ihrem design. Having-Bedingungen in my_fun1 und my_fun2 kann der "richtige" Antwort hier, aber es hängt davon ab, was du tust, natürlich. Wenn Sie ein bisschen mehr Informationen, warum Sie wollen/brauchen dies, wir können Ihnen helfen, besser.
InformationsquelleAutor arke
Legen Sie einfach Ihre erste Funktionsaufruf in einer Schleife. Das ist eine der allgemein anerkannten Programmierung Methoden sowieso.
So dass Sie tun können
Wenn Sie brauchen, function1() und function2() zum Abbruch tun, etwas, was sich auf dieses Verhalten, dann ist Ihre situation entweder ein Fehler oder ist im Grunde wie ein Fehler auf, so werfen eine Ausnahme wäre dann eine bessere Lösung. Auch wenn es nicht ein Fehler, es ist im Grunde immer noch die gleiche Art von Kontroll-Logik.
Allerdings, wenn dies ist der nicht-Fehler Ablaufsteuerung des Programms, möchten Sie vielleicht Blick auf die Struktur mehr und herausfinden, was Sie brauchen, es zu tun auf diese Weise, und versuchen zu vermeiden, was Logik ist die Ursache HIERFÜR.
InformationsquelleAutor Loduwijk