Share via


set_unexpected (CRT)

Installe votre propre fonction d’arrêt qui doit être appelée par unexpected.

Syntaxe

unexpected_function set_unexpected( unexpected_function unexpFunction );

Paramètres

unexpFunction
Pointeur désignant une fonction que vous écrivez pour remplacer la fonction unexpected.

Valeur retournée

Retourne un pointeur désignant la précédente fonction d’arrêt inscrite par _set_unexpected, si bien que la fonction précédente peut être restaurée ultérieurement. Si aucune fonction précédente n’a été définie, la valeur de retour peut être utilisée pour restaurer le comportement par défaut ; cette valeur peut être NULL.

Notes

La fonction set_unexpected installe unexpFunction comme fonction appelée par unexpected. unexpected n’est pas utilisé dans l’implémentation actuelle de gestion des exceptions C++. Le type unexpected_function est défini dans EH.H comme pointeur vers une fonction inattendue défini par l’utilisateur, unexpFunction qui retourne void. Votre fonction personnalisée unexpFunction ne doit pas revenir à son appelant.

typedef void ( *unexpected_function )( );

Par défaut, unexpected appelle terminate. Vous pouvez modifier ce comportement par défaut en écrivant votre propre fonction d’arrêt et en appelant set_unexpected avec le nom de votre fonction comme argument. unexpected appelle la dernière fonction transmise comme argument à set_unexpected.

Contrairement à la fonction d’arrêt personnalisée dont l’installation résulte d’un appel à set_terminate, une exception peut être levée à partir de unexpFunction.

Dans un environnement multithread, les fonctions inattendues sont gérées séparément pour chaque thread. Chaque nouveau thread doit installer sa propre fonction inattendue. Par conséquent, chaque thread est responsable de sa propre gestion inattendue.

Dans l’implémentation Microsoft actuelle de gestion des exceptions C++, unexpected appelle par défaut la fonction terminate, qui n’est jamais appelée par la bibliothèque runtime de gestion des exceptions. Il n’y a pas d’avantage particulier à appeler unexpected plutôt qu’à terminate.

Il existe un seul set_unexpected gestionnaire pour toutes les DLL ou EXEs liées dynamiquement ; même si vous appelez set_unexpected votre gestionnaire peut être remplacé par un autre ou que vous remplacez un gestionnaire défini par une autre DLL ou EXE.

Spécifications

Routine En-tête requis
set_unexpected <eh.h>

Pour plus d’informations sur la compatibilité, consultez Compatibility.

Voir aussi

Routines de gestion des exceptions
abort
_get_unexpected
set_terminate
terminate
unexpected