Narf! Geschrieben 30. September 2003 Teilen Geschrieben 30. September 2003 Mal was Neues. In meinem Programm habe ich Funktionen mit Rückgabewert, z. Bsp. PreTranslateMessage(MSG* pMsg). In dieser Funktion rufe ich eine weitere Funktion auf und gebe keinen Wert zurück. Ich denke mir, dass da Fehler auftreten, die zwar das Programm nicht behindern, aber ich möchte sie doch vermeiden. Kann ich eine Funktion aufrufen UND einen Wert zurückgeben, damit sich die erste Funktion beendet? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Goos Geschrieben 30. September 2003 Teilen Geschrieben 30. September 2003 Wenn du nur eine Funktion aufrufst, dann kehrst du ja nach deren abarbeitung in dein PreTranslateMessage zurueck und alles wird gut Goos Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 30. September 2003 Teilen Geschrieben 30. September 2003 Original geschrieben von Narf! Kann ich eine Funktion aufrufen UND einen Wert zurückgeben, damit sich die erste Funktion beendet? Klar kannst du das. Ich verstehe aber irgendwie das Problem nicht. Kannst du einen Beispielcode posten? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Narf! Geschrieben 30. September 2003 Autor Teilen Geschrieben 30. September 2003 Ich glaube, die kommt nicht zurück. Das mit dem Code wird schwierig, weil zu lang. Ich versuche es mal so: PreTranslateMessage() { ... GotoPage(); ... return irgendwas; } GotoPage() { ... NächsteFunktion(); ... } Es ist ein bischen chaotisch, aber das Programm läuft. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 30. September 2003 Teilen Geschrieben 30. September 2003 Ich sehe da kein Problem. Solange GotoPage und NächsteFunktion nicht blockieren (d.h. sie warten auf ein bestimmtes Ereignis, und kommen erst zurück, wenn das Ereignis eintritt), ist das so OK. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Narf! Geschrieben 1. Oktober 2003 Autor Teilen Geschrieben 1. Oktober 2003 GotoPage() und NächsteFunktion() sind void und warten auf kein Ergebnis. Aber die Funktion PreTranslateMessage() wird wieder aufgerufen, ohne das sie vorher ihr return hatte, weil ständig irgend welche Tasten gedrückt werden. Deshalb wäre es gut, wenn man in der PreTranslateMessage() schreiben könnte: { ... return [Wert] UND GotoPage(); } Damit halt die Funktion ihr return hat und die Funktion GotoPage() aufgerufen wird. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
nic_power Geschrieben 1. Oktober 2003 Teilen Geschrieben 1. Oktober 2003 Hallo, Original geschrieben von Narf! PreTranslateMessage() wird wieder aufgerufen Ich verstehe das Problem immer noch nicht. "Wird wieder aufgerufen" setzt voraus, dass PreTranslateMessage() vor dem erneuten Aufruf beendete wurde. Und dabei liefert diese Funktion per "return" einen Rückgabewert. { ... return [Wert] UND GotoPage(); } [/php] Das sieht für mich so aus, als ob Du _nach_ dem return innerhalb von PreTranslateMessage() nochmals GotoPage aufrufen möchtest. Was spricht gegen: [php] { ... GotoPage(); return [Wert]; } Das entspricht der von Dir gewünschten Funktionalität. Alternativ kannst Du GotoPage() auch mit einem Rückgabewert implementieren. Nic Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Narf! Geschrieben 6. Oktober 2003 Autor Teilen Geschrieben 6. Oktober 2003 Mal ein anderes Beispiel: OnSelChangeTree() { ... Funktion(); return [Wert]; } Wenn ich in der treeansicht navigiere, wird das markierte Item in Funktion weiterverarbeitet. Da aber mehrmals im Tree navigiert wird, wird die Funktion OnSelChangeTree() öfters aufgerufen ohne vorher mit return abgeschlossen worden zu sein, weil immer die Funktion() davor steht. Ich möchte also die Funktion OnSelChangeTree() mit dem Aufruf der Funktion() UND dem return [Wert] abschließen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 6. Oktober 2003 Teilen Geschrieben 6. Oktober 2003 Da aber mehrmals im Tree navigiert wird, wird die Funktion OnSelChangeTree() öfters aufgerufen ohne vorher mit return abgeschlossen worden zu sein, weil immer die Funktion() davor steht. Hast du konkrete Anhaltspunkte dafür, dass das passiert? Bei normaler Navigation wird OnSelChangeTree immer schön nacheinander aufgerufen, weil die Funktion, die OnSelChangeTree aufruft, mit dem nächsten Aufruf wartet, bis der vorherige beendet ist. Ein erneuter Aufruf ohne vorheriges return könnte nur dann passieren, wenn in Funktion irgendwie OnSelChangeTree aufgerufen wird, d.h. wenn du eine Rekursion in deinem Code hast. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
nic_power Geschrieben 6. Oktober 2003 Teilen Geschrieben 6. Oktober 2003 Hallo, das hört sich für mich wie die normale Vorgehensweise bei einer Rekursion an. Wenn der letzte Aufruf zurückkommt, wird die Rekursion beendet und beim Aufrufer der Code weiter ausgeführt. Problematisch ist dies nicht, da es sich um eine Standard-Technik handelt (ok, bei einigen Architekturen wirds der Aufruf ab einer bestimmten Rekursionstiefe ineffizienter, was im allgemeinen aber unkritisch ist). Nic Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.