Namespaces
Variants

abort_handler_s

From cppreference.net
< c ‎ | error
Défini dans l'en-tête <stdlib.h>
void abort_handler_s ( const char * restrict msg,

void * restrict ptr,
errno_t error

) ;
(depuis C11)

Écrit un message défini par l'implémentation vers stderr qui doit inclure la chaîne pointée par msg et appelle abort() .

Un pointeur vers cette fonction peut être passé à set_constraint_handler_s pour établir un gestionnaire de violation des contraintes d'exécution.

Comme pour toutes les fonctions à vérification de limites, abort_handler_s est uniquement garanti d'être disponible si __STDC_LIB_EXT1__ est défini par l'implémentation et si l'utilisateur définit __STDC_WANT_LIB_EXT1__ à la constante entière 1 avant d'inclure <stdlib.h> .

Table des matières

Paramètres

msg - pointeur vers le message écrit dans le flux d'erreur standard
ptr - pointeur vers un objet défini par l'implémentation ou un pointeur nul. Les exemples d'objets définis par l'implémentation sont des objets qui donnent le nom de la fonction ayant détecté la violation et le numéro de ligne lorsque la violation a été détectée
error - une valeur positive de type errno_t

Valeur de retour

aucun ; cette fonction ne retourne pas à son appelant

Notes

Si set_constraint_handler_s n'est jamais appelé, le gestionnaire par défaut est défini par l'implémentation : il peut s'agir de abort_handler_s , ignore_handler_s , ou d'un autre gestionnaire défini par l'implémentation.

Exemple

#define __STDC_WANT_LIB_EXT1__ 1
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
#ifdef __STDC_LIB_EXT1__
    char dst[2];
    set_constraint_handler_s(ignore_handler_s);
    int r = strcpy_s(dst, sizeof dst, "Too long!");
    printf("dst = \"%s\", r = %d\n", dst, r);
    set_constraint_handler_s(abort_handler_s);
    r = strcpy_s(dst, sizeof dst, "Too long!");
    printf("dst = \"%s\", r = %d\n", dst, r);
#endif
}

Sortie possible :

dst = "", r = 22
abort_handler_s was called in response to a runtime-constraint violation.
The runtime-constraint violation was caused by the following expression in strcpy_s:
(s1max <= (s2_len=strnlen_s(s2, s1max)) ) (in string_s.c:62)
Note to end users: This program was terminated as a result
of a bug present in the software. Please reach out to your
software's vendor to get more help.
Aborted

Références

  • Norme C11 (ISO/IEC 9899:2011) :
  • K.3.6.1.2 La fonction abort_handler_s (p: 605)

Voir aussi

Fonction de rappel d'ignorance pour les fonctions à vérification de limites
(fonction)
Définir la fonction de rappel d'erreur pour les fonctions à vérification de limites
(fonction)