Comment attraper la division entière par zéro exception en langage C?

Il est connu comment attraper le flotteur de la division par zéro, à l'exception de l'utilisation de

signal(SIGFPE, handler)

mais il ne l'attrape pas de division entière par zéro problème, même si j'ai de contrôle d'installation de word avec

_control87(0, _MCW_EM ); (MS VC 2010)

SubQuestion_1: Comment attraper division entière par zéro dans le programme C sous Windows sans l'utilisation de la SEH EXCEPTION_INT_DIVIDE_BY_ZERO? (Sous Unix/Linux, cela peut être fait avec l'utilisation de la norme signal SIGFPE techinque)

EDIT:
le signal est en C ANSI, traitement du signal de l'approche.
_control87 est la fonction standard de Windows pour régler le flotteur mot de contrôle.

Question similaire: Comment gérer toutes les erreurs, y compris à l'intérieur de la bibliothèque C d'erreurs, de manière uniforme

NOTE (à partir de la norme ISO/IEC 9899:TC2 l'Annexe H. 2.2):

"La signé C les types d'entiers de type int, long int, long int, et le correspondant de
unsigned types sont compatibles avec LIA−1. ... C est entier non signé types sont ‘modulo’ dans la LIA−1 sens qui déborde ou hors-limites des résultats silencieusement envelopper. Une mise en œuvre qui définit entier signé de types comme étant aussi modulo n'a pas besoin de détecter le dépassement d'entier, dans ce cas, entiers de division par zéro besoin d'être détecté."

?SOLUTION FINALE:

Pour Windows: il jette SEH exception. De sorte qu'il peut être pris par l'utilisation de __essayer __l'exception.
Comme solution possible SEH traduction pourrait être utilisé pour gérer la SEH exception et de les traduire à l'appel de la fonction. Ce n'est pas une façon "naturelle", mais il semble que c'est le seul moyen.

Pour Unix: c'est peut-être coincé avec signal SIGFPE solution. Ou vérifier wiki pour FPE_INTDIV solution ( http://rosettacode.org/wiki/Detect_division_by_zero#C ).

Comme GMan a raison à propos de "comportement indéfini" je suis le choix de sa réponse comme correcte.

Remarque: Il est intéressant de vérifier CR\crt\src\winxfltr.c: _XcptActTab tableau : )

Veuillez expliquer votre contexte. Voir signal, je suppose que vous êtes sur Unix? Qu'est-ce que _control87? -1 pour reposer une question que vous semblez avoir demandé à quelques minutes auparavant. Merci d'éditer votre premier post, au lieu d'en créer un nouveau.
Ce n'est pas une fonctionnalité du langage C, ce qui ne veut pas avoir des exceptions. C'est une plate-forme spécifique. Veuillez fournir des OS et le compilateur que vous utilisez.
Jens Gustedt: Concernant "-1" - ce sont deux questions différentes. La première était sur le pourquoi du flotteur de division par zéro exception n'a pas évoqué dans le contexte de la fonction appelée. Ce est sur la façon de prendre du integer division par zéro.
double possible de Pourquoi "division par zéro" n'était pas attraper, même _control87 a été appelé?
Goz: non il ne l'est pas. Lire mon commentaire ci-dessus.

OriginalL'auteur outmind | 2010-06-23