2016-12-05 1 views
0

Dieses Stück von C++ Code stürzt ab, weil es enthält Division durch Null-Fehler:Ist es möglich, Hardwarefehler in C++ zu erfassen?

int main() 
{ 
    try { 
     int i = 0; 
     int j = 1/i; 
    } catch(...) {} 
    return 0; 
} 

Ist es möglich, Fehler wie diese auf verschiedenen Plattformen zu fangen? Wenn Sie nur einige der Plattformen kennen, können Sie über diejenigen, die Sie kennen, antworten.

Ich habe eine grundlegende Idee über SEH unter Windows und Signale unter Linux, aber ich bin mir nicht sicher, ob es eine Methode gibt, alle Arten von Hardwarefehlern genau wie Softwarefehler in C++ zu fangen.

Schließlich sieht es aus wie Division durch Null Ausnahmen können in Python gefangen werden:

try: 
    i = 0 
    j = 1/i 
except: 
    pass 

Und in Java:

public class Main { 
    public static void main(String[] args) { 
     try { 
      int i = 0; 
      int j = 1/i; 
     } catch (Exception e) {} 
    } 
} 

Also, was sie daran hindert, in C++ gefangen?

+0

Es ist ein nicht definiertes Verhalten, es ist keine Ausnahme – Danh

+1

Sie würden bessere Chancen haben, dieses zu erhalten beantwortet, wenn Sie es auf eine einzige Plattform eingrenzen würden. Es ist ziemlich breit wie es aussieht. –

+0

Was verhindert, dass sie in C++ gefangen werden, ist, dass C++ sich entschieden hat, "so schnell wie möglich zu gehen, auch wenn das bedeutet, dass sich unterschiedliche Plattformen anders verhalten". Somit wäre eine Plattform, auf der 1/0 alle Register unverändert lassen würde, in Ordnung. Java und Python haben sich entschieden, "alle Plattformen verhalten sich gleich", daher muss vor dem Teilen eine Überprüfung auf Null durchgeführt werden. –

Antwort

Verwandte Themen