Exceptions
-
Hallo, folgende bsp. situation:
void do_something(int x,int y) { try{ while(x > y) { x = x/y; y --; } }catch(...){ //Fehlerbehandlung } }Wenn nun ein Fehler auftritt, kann ich dann machen dass die Schleife nachdem der Fehler in der Bereinigung beseitigt wurde weitermacht?
Oder muss ich das rekursiv lösen?
thx
-
einfach try/catch in die schleife packen?
-
... oder einfach umgehen, dass die Exception ausgelöst wird. Geht jedenfalls in diesem Fall recht gut mit if ( y != 0 )
-
danke!

@Badestrand jap, ich weiß, allerdings war das hier nur ein sehr simples Beispiel, für das Problem meines komplexeren Programms ;), trotzdem Danke

-
Bei Division durch Null bekommst du im Normalfall sowieso keine C++ Exception geworfen?!?
-
hustbaer schrieb:
Bei Division durch Null bekommst du im Normalfall sowieso keine C++ Exception geworfen?!?
Doch, ich meine schon... Müsste nur mal testen, welche

-
Es fliegt keine C++ Exception. Wohl aber möglicherweise eine fangbare Hardware Exception.
-
Shade Of Mine schrieb:
Es fliegt keine C++ Exception. Wohl aber möglicherweise eine fangbare Hardware Exception.
"Wohl aber" und "möglicherweise" in einem Satz? Widerspricht sich das nicht? Man sagt doch "wohl aber", wenn man sich bei einer Sache ziemlich sicher ist, oder nicht?
-
Habs mal kurz getestet, hier fliegt eine Exception:
int x = 0; try { int i = 7 / x; } catch (... ) { cout << "Some exception..." << endl; }Kompiliert mit MSVC++ 2003. Bin mir auch relativ sicher, dass die Exception von der Hardware geworfen wird - wie sie dann ins Programm kommt, keine Ahnung. Ist ja letzen Endes auch egal

-
Badestrand schrieb:
Bin mir auch relativ sicher, dass die Exception von der Hardware geworfen wird - wie sie dann ins Programm kommt, keine Ahnung.
Stichwort SEH. Hat aber nichts mit Standard-C++ zu tun. Ist ne Win Erweiterung.
-
Ich bin mir sehr wohl bewusst dass man es mit MSVC so hinbiegen kann - Stichwort _set_se_translator und so.
MSVC .NET 2003 ist da IIRC auch nicht so 100% konform, der macht einige Dinge die er nicht machen sollte was das angeht. Wenn dann also bitte mit MSVC 2005 testen, und ohne _set_se_translator oder ähnliche Erweiterungen zu verwenden.