set_constraint_handler_s, constraint_handler_t
|
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,
|
(2) | (depuis C11) |
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
|
(C11)
|
rappel d'abandon pour les fonctions à vérification de limites
(fonction) |
|
(C11)
|
rappel d'ignorance pour les fonctions à vérification de limites
(fonction) |