set_constraint_handler_s, constraint_handler_t
|
Definiert in Header
<stdlib.h>
|
||
|
constraint_handler_t set_constraint_handler_s
(
constraint_handler_t handler
)
;
|
(1) | (seit C11) |
|
typedef
void
(
*
constraint_handler_t
)
(
const
char
*
restrict
msg,
void
*
restrict
ptr,
|
(2) | (seit C11) |
Wenn
set_constraint_handler_s
niemals aufgerufen wird, ist der Standard-Handler implementierungsdefiniert: Es kann
abort_handler_s
,
ignore_handler_s
oder ein anderer implementierungsdefinierter Handler sein.
Wie bei allen grenzwertgeprüften Funktionen sind
set_constraint_handler_s
und
constraint_handler_t
nur garantiert verfügbar, wenn
__STDC_LIB_EXT1__
durch die Implementierung definiert ist und wenn der Benutzer
__STDC_WANT_LIB_EXT1__
auf die ganzzahlige Konstante
1
setzt, bevor
<stdlib.h>
eingebunden wird.
Inhaltsverzeichnis |
Parameter
| handler | - |
Zeiger auf eine Funktion vom Typ
constraint_handler_t
oder ein Nullzeiger
|
| msg | - | Zeiger auf eine Zeichenkette, die den Fehler beschreibt |
| ptr | - | Zeiger auf ein implementierungsdefiniertes Objekt oder ein Nullzeiger. Beispiele für implementierungsdefinierte Objekte sind Objekte, die den Namen der Funktion angeben, die die Verletzung erkannt hat, und die Zeilennummer, bei der die Verletzung erkannt wurde |
| error | - |
der Fehler, der von der aufrufenden Funktion zurückgegeben werden soll, falls es sich um eine der Funktionen handelt, die
errno_t
zurückgeben
|
Rückgabewert
Ein Zeiger auf den zuvor installierten Laufzeitbeschränkungs-Handler. (Hinweis: Dieser Zeiger ist niemals ein Nullzeiger, da der Aufruf von set_constraint_handler_s ( NULL ) den systemstandardmäßigen Handler einrichtet).
Beispiel
#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 }
Mögliche Ausgabe:
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
Referenzen
- C23-Standard (ISO/IEC 9899:2024):
-
- K.3.6/2 constraint_handler_t (S.: TBD)
-
- K.3.6.1.1 Die set_constraint_handler_s-Funktion (S.: TBD)
- C17-Standard (ISO/IEC 9899:2018):
-
- K.3.6/2 constraint_handler_t (S: TBD)
-
- K.3.6.1.1 Die set_constraint_handler_s-Funktion (S: TBD)
- C11 Standard (ISO/IEC 9899:2011):
-
- K.3.6/2 constraint_handler_t (S: 604)
-
- K.3.6.1.1 Die set_constraint_handler_s-Funktion (S: 604-605)
Siehe auch
|
(C11)
|
Abbruch-Callback für die grenzwertgeprüften Funktionen
(Funktion) |
|
(C11)
|
Ignorieren-Callback für die grenzwertgeprüften Funktionen
(Funktion) |