ignore_handler_s
| Definiert im Header <stdlib.h> |
||
| void ignore_handler_s( const char * restrict msg, void * restrict ptr, |
(seit C11) | |
Die Funktion gibt einfach zum Aufrufer zurück, ohne weitere Aktionen auszuführen.
Ein Zeiger auf diese Funktion kann an set_constraint_handler_s übergeben werden, um einen Laufzeit-Handler für Verstöße gegen Einschränkungen einzurichten, der nichts tut.
- Wie bei allen grenzgeprüften Funktionen ist
ignore_handler_snur dann garantiert verfügbar, wenn __STDC_LIB_EXT1__ von der Implementierung definiert ist und wenn der Benutzer __STDC_WANT_LIB_EXT1__ vor dem Einbinden von<stdlib.h>auf die Ganzzahlkonstante 1 setzt.
Inhalt |
[bearbeiten] 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, die die Verletzung erkannt hat, und die Zeilennummer, zu der die Verletzung erkannt wurde, angeben. |
| 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. |
[bearbeiten] Rückgabewert
(keine)
[bearbeiten] Anmerkungen
Wenn ignore_handler_s als Laufzeit-Handler für Einschränkungsverstöße verwendet wird, können die Verstöße durch Untersuchung der Ergebnisse der grenzgeprüften Funktionsaufrufe erkannt werden, die je nach Funktion unterschiedlich sein können (nicht-null errno_t, null-Zeichen in das erste Byte des Ausgabestrings geschrieben, etc.).
Wenn set_constraint_handler_s nie aufgerufen wird, ist der Standard-Handler implementierungsdefiniert: Es kann abort_handler_s, ignore_handler_s oder ein anderer implementierungsdefinierter Handler sein.
[bearbeiten] 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
[bearbeiten] Referenzen
- C11-Standard (ISO/IEC 9899:2011)
- K.3.6.1.3 Die Funktion ignore_handler_s (S: 606)
[bearbeiten] Siehe auch
| (C11) |
Abbruch-Callback für die grenzgeprüften Funktionen (Funktion) |
| legt den Fehler-Callback für grenzgeprüfte Funktionen fest (Funktion) |