Namespaces
Variants

set_constraint_handler_s, constraint_handler_t

From cppreference.net
< c ‎ | error
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,

errno_t error ) ;
(2) (seit C11)
1) Konfiguriert den Handler, der von allen bounds-checked functions bei einer Runtime-Constraint-Verletzung aufgerufen wird, oder stellt den Standard-Handler wieder her (falls handler ein Nullzeiger ist).
2) Der Zeiger auf einen Handler, der bei einer Laufzeitbedingungsverletzung aufgerufen wird.

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

Abbruch-Callback für die grenzwertgeprüften Funktionen
(Funktion)
Ignorieren-Callback für die grenzwertgeprüften Funktionen
(Funktion)