2009-08-20 8 views
3

Je me demandais juste si une exception système comme dire diviser par zéro "jette" quelque chose à l'application. Serait-il possible d'attraper ceci en quelque sorte par défaut?Attraper des exceptions par défaut en C++

je veux dire que nous pouvons définir une fracture personnalisée fn qui vérifie diviseur nul et génère une exception, mais juste pensé que ce serait bien si cette exception a été levée par défaut

//say I do this 
int i; 
try 
{ 
i /= 0; // My compiler (gcc) did warn abt the divide by zero :-) 
} 
catch (...) 
{ 
// Can we get here for this case? 
} 

Répondre

3

Cela dépend-OS. Vous pouvez le faire dans le code Visual C++ sous Windows - catch (...) interceptera également les exceptions dites structurées qui incluent les divisions par zéro, les violations d'accès, etc., mais pas dans le code compilé par gcc sous Linux.

+3

L'observation clé ici est que la division par 0 est un comportement indéfini en ce qui concerne la norme C++. Cela signifie que les implémentations individuelles peuvent faire ce qu'elles veulent - interrompre le processus avec un signal, lancer une exception, téléphoner à votre patron et lui dire que vous ne pouvez pas coder pour le caramel, peu importe. –

+0

Pour Windows, vous pouvez utiliser SetUnhandledExceptionFilter pour installer un gestionnaire qui à son tour peut lancer des exceptions C++, par exemple. dérivé de std :: exception. –

+0

Vous devez activer/EHa pour attraper diviser par zéro, etc en Visual C++: http://msdn.microsoft.com/en-us/library/1deeycx5%28VS.80%29.aspx –

1

La norme C++ ne dit pas que la division par zéro déclenche une exception - elle indique qu'il s'agit d'un comportement non défini.

Aussi, quand vous dites:

i /= 0; // My compiler (gcc) did warn abt the divide by zero :-) 

le compilateur ne peut donner l'avertissement si la chose vous divisez par est une constante.

Questions connexes