ignore_handler_s
|
Definiert im Header
<stdlib.h>
|
||
|
void
ignore_handler_s
(
const
char
*
restrict
msg,
void
*
restrict
ptr,
|
(seit C11) | |
Die Funktion kehrt einfach zum Aufrufer zurück, ohne eine weitere Aktion auszuführen.
Ein Zeiger auf diese Funktion kann an set_constraint_handler_s übergeben werden, um einen Laufzeitbedingungsverletzungs-Handler einzurichten, der nichts tut.
-
Wie bei allen grenzprüfenden Funktionen ist
ignore_handler_snur garantiert verfügbar, falls __STDC_LIB_EXT1__ durch die Implementierung definiert ist und falls der Benutzer __STDC_WANT_LIB_EXT1__ auf den ganzzahligen Konstantenwert 1 setzt, bevor<stdlib.h>eingebunden wird.
Inhaltsverzeichnis |
Parameter
| msg | - | Zeiger auf eine Zeichenkette, die den Fehler beschreibt |
| ptr | - | Zeiger auf ein implementierungsdefiniertes Objekt oder einen 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
(keine)
Hinweise
Wenn
ignore_handler_s
als Runtime-Constraints-Handler verwendet wird, können Verstöße durch Überprüfung der Ergebnisse der bounds-geprüften Funktionsaufrufe erkannt werden, die für verschiedene Funktionen unterschiedlich sein können (nicht-null
errno_t
, Nullzeichen in das erste Byte der Ausgabezelle geschrieben, etc)
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.
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
- C11-Standard (ISO/IEC 9899:2011):
-
- K.3.6.1.3 Die ignore_handler_s-Funktion (S: 606)
Siehe auch
|
(C11)
|
Abbruch-Callback für die bounds-checked-Funktionen
(Funktion) |
|
(C11)
|
Setzt den Fehler-Callback für bounds-checked-Funktionen
(Funktion) |