Namespaces
Variants

set_constraint_handler_s, constraint_handler_t

From cppreference.net
< c ‎ | error
Défini dans l'en-tête <stdlib.h>
constraint_handler_t set_constraint_handler_s ( constraint_handler_t handler ) ;
(1) (depuis C11)
typedef void ( * constraint_handler_t ) ( const char * restrict msg,

void * restrict ptr,

errno_t error ) ;
(2) (depuis C11)
1) Configure le gestionnaire à être appelé par toutes les fonctions à vérification de limites lors d'une violation de contrainte d'exécution ou restaure le gestionnaire par défaut (si handler est un pointeur nul).
2) Le pointeur vers un gestionnaire qui sera appelé en cas de violation de contrainte d'exécution.

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.

Comme pour toutes les fonctions à vérification de limites, set_constraint_handler_s et constraint_handler_t ne sont garantis d'être disponibles que 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

handler - pointeur vers une fonction de type constraint_handler_t ou un pointeur nul
msg - pointeur vers une chaîne de caractères décrivant l'erreur
ptr - pointeur vers un objet défini par l'implémentation ou un pointeur nul. Exemples d'objets définis par l'implémentation : objets donnant le nom de la fonction ayant détecté la violation et le numéro de ligne où la violation a été détectée
error - l'erreur sur le point d'être retournée par la fonction appelante, s'il s'agit d'une des fonctions retournant errno_t

Valeur de retour

Un pointeur vers le gestionnaire de contraintes d'exécution précédemment installé. (Note : ce pointeur n'est jamais un pointeur nul car l'appel de set_constraint_handler_s ( NULL ) configure le gestionnaire par défaut du système).

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 C23 (ISO/CEI 9899:2024) :
  • K.3.6/2 constraint_handler_t (p: TBD)
  • K.3.6.1.1 La fonction set_constraint_handler_s (p: TBD)
  • Norme C17 (ISO/CEI 9899:2018) :
  • K.3.6/2 constraint_handler_t (p: TBD)
  • K.3.6.1.1 La fonction set_constraint_handler_s (p: TBD)
  • Norme C11 (ISO/IEC 9899:2011) :
  • K.3.6/2 constraint_handler_t (p: 604)
  • K.3.6.1.1 La fonction set_constraint_handler_s (p: 604-605)

Voir aussi

rappel d'abandon pour les fonctions à vérification de limites
(fonction)
rappel d'ignorance pour les fonctions à vérification de limites
(fonction)