Frage

Die folgende catch () wird nicht aufgerufen:

void test(void)
{
    int i=1,j=0,k;
    try
    {
        k = i/j;
    }
    catch(...)
    {
        ...handle it...
    }
}

Gibt es eine Möglichkeit, diese Art von Ausnahme zu fangen?

War es hilfreich?

Lösung

Bitte überprüfen http://linux.die.net/man/1/gcc gibt es eine Compiler-Option -mcheck-Null-Division zu handhaben.

Alternativ können Sie eine SIGFPE Handler Installation könnte eine Option sein,  Ein Schwimmer div von 0 würde dann ein ‚FPE_ZERODIVIDE‘

erzeugen
         signal(SIGFPE, (fptr) FPE_ExceptionHandler);

         void FPE_ExceptionHandler(int nSig,int nErrType,int */*pnReglist*/)
          {
                switch(nErrType)
                  {
                    case FPE_ZERODIVIDE:  /* ??? */ break;
                }

            }

da

Die meisten Gleitkomma-Systeme basieren auf dem IEEE-Standard basiert, die von 0. Division erlaubt Dies gibt entweder positive positive oder negative Unendlichkeit gegebenenfalls auf der Grundlage der Vorzeichen der Zahlen. (Außer 0/0 den undefinierten NAN zurück -. Wieder keinen Ausnahmefall) Dies führt dazu, für wissenschaftliche und mathematische Anwendungen nützlich zu sein. Das Nans Signal effektiv einen Fall, in dem Berechnungen nicht pssible waren aber erlauben Berechnungen fortzusetzen. Die fortgesetzten Berechnungen werden keine neuen Ergebnisse produzieren, sondern wird auch weiterhin Nans zurückzukehren. Dies ermöglicht lange, lange Ketten von Berechnungen witout Fehler innerhalb der calculatiosn Überprüfung durchgeführt werden. Die Fehlerprüfungen müssen erst ganz am Ende der Arbeit durchgeführt werden. Dies macht den Code viel viel einfacher und auch schneller. Es kann auch manchmal als für einige Anwendungen nützlicher sein, infintity ist ein „nützlich“ Ergebnis nicht wirklich ein Zeichen von Problemen.

Andere Tipps

Nein - es gibt keine Ausnahme ausgelöst (Sie ein Signal bekommen - wahrscheinlich SIGFPE). Sie müssen für eine mögliche Division durch Nullen in Ihrem Code zu überprüfen, und dann eine Ausnahme aus, selbst,

Wenn dies führt zu einem Laufzeitfehler überhaupt (siehe lakshmanaraj der nette Diskussion über IEEE Mathematik , obwohl einige Compiler-Fehler statt NaNs) zwingen lassen, es wirft eine Gleitkomma-Ausnahme Signal .

Die Signale sind ein anderer Mechanismus als c ++ Ausnahmen und werden auf OS-Ebene behandelt. Es gibt bereits eine Reihe von SO Fragen bezüglich des * nichts Signalmechanismus, einschließlich:

Für Fenster, werden Sie jemand anderes fragen. Mac OS X ist -. Von course-- ein Unix-System abgeleitet

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top