_set_invalid_parameter_handler
, _set_thread_local_invalid_parameter_handler
Mengatur fungsi yang akan dipanggil ketika CRT mendeteksi argumen yang tidak valid.
Sintaks
_invalid_parameter_handler _set_invalid_parameter_handler(
_invalid_parameter_handler pNew
);
_invalid_parameter_handler _set_thread_local_invalid_parameter_handler(
_invalid_parameter_handler pNew
);
Parameter
pNew
Penunjuk fungsi ke handler parameter baru yang tidak valid.
Nilai hasil
Penunjuk ke handler parameter yang tidak valid sebelum panggilan.
Keterangan
Banyak fungsi runtime C memeriksa validitas argumen yang diteruskan kepada mereka. Jika argumen yang tidak valid diteruskan, fungsi dapat mengatur errno
nomor kesalahan atau mengembalikan kode kesalahan. Dalam kasus seperti itu, handler parameter yang tidak valid juga dipanggil. Runtime C menyediakan handler parameter tidak valid global default yang mengakhiri program dan menampilkan pesan kesalahan runtime. Anda dapat menggunakan _set_invalid_parameter_handler
untuk mengatur fungsi Anda sendiri sebagai handler parameter global yang tidak valid. Runtime C juga mendukung handler parameter tidak valid thread-local. Jika handler parameter thread-local diatur dalam utas dengan menggunakan _set_thread_local_invalid_parameter_handler
, fungsi runtime C yang dipanggil dari utas gunakan handler tersebut alih-alih handler global. Hanya satu fungsi yang dapat ditentukan sebagai handler argumen global yang tidak valid pada satu waktu. Hanya satu fungsi yang dapat ditentukan sebagai handler argumen tidak valid thread-local per utas, tetapi utas yang berbeda dapat memiliki handler thread-local yang berbeda. Handler lokal utas memungkinkan Anda mengubah handler yang digunakan di salah satu bagian kode Anda tanpa memengaruhi perilaku utas lain.
Ketika runtime memanggil fungsi parameter yang tidak valid, biasanya berarti bahwa terjadi kesalahan yang tidak dapat dipulihkan. Fungsi handler parameter yang tidak valid yang Anda berikan harus menyimpan data apa pun yang dapat dilakukannya lalu membatalkan. Ini seharusnya tidak mengembalikan kontrol ke fungsi utama kecuali Anda yakin bahwa kesalahan dapat dipulihkan.
Fungsi handler parameter yang tidak valid harus memiliki prototipe berikut:
void _invalid_parameter(
const wchar_t * expression,
const wchar_t * function,
const wchar_t * file,
unsigned int line,
uintptr_t pReserved
);
Argumen expression
adalah representasi string lebar dari ekspresi argumen yang memunculkan kesalahan. Argumen function
adalah nama fungsi CRT yang menerima argumen yang tidak valid. Argumen file
adalah nama file sumber CRT yang berisi fungsi . Argumen line
adalah nomor baris dalam file tersebut. Argumen terakhir dicadangkan. Semua parameter memiliki nilai NULL
kecuali versi debug pustaka CRT digunakan.
Secara default, status global fungsi ini dicakup ke aplikasi. Untuk mengubah perilaku ini, lihat Status global di CRT.
Persyaratan
Rutin | Header yang diperlukan |
---|---|
_set_invalid_parameter_handler , _set_thread_local_invalid_parameter_handler |
C: <stdlib.h> C++: <cstdlib> atau <stdlib.h> |
Fungsi _set_invalid_parameter_handler
dan _set_thread_local_invalid_parameter_handler
khusus Microsoft. Untuk informasi kompatibilitas, lihat Kompatibilitas.
Contoh
Dalam contoh berikut, handler kesalahan parameter yang tidak valid digunakan untuk mencetak fungsi yang menerima parameter yang tidak valid dan file dan baris di sumber CRT. Ketika pustaka CRT debug digunakan, kesalahan parameter yang tidak valid juga menimbulkan pernyataan, yang dinonaktifkan dalam contoh ini menggunakan _CrtSetReportMode
.
// crt_set_invalid_parameter_handler.c
// compile with: /Zi /MTd
#include <stdio.h>
#include <stdlib.h>
#include <crtdbg.h> // For _CrtSetReportMode
void myInvalidParameterHandler(const wchar_t* expression,
const wchar_t* function,
const wchar_t* file,
unsigned int line,
uintptr_t pReserved)
{
wprintf(L"Invalid parameter detected in function %s."
L" File: %s Line: %d\n", function, file, line);
wprintf(L"Expression: %s\n", expression);
abort();
}
int main( )
{
char* formatString;
_invalid_parameter_handler oldHandler, newHandler;
newHandler = myInvalidParameterHandler;
oldHandler = _set_invalid_parameter_handler(newHandler);
// Disable the message box for assertions.
_CrtSetReportMode(_CRT_ASSERT, 0);
// Call printf_s with invalid parameters.
formatString = NULL;
printf(formatString);
}
Invalid parameter detected in function common_vfprintf. File: minkernel\crts\ucrt\src\appcrt\stdio\output.cpp Line: 32
Expression: format != nullptr
Lihat juga
_get_invalid_parameter_handler
, _get_thread_local_invalid_parameter_handler
Versi fungsi CRT yang ditingkatkan keamanan
errno
, _doserrno
, _sys_errlist
, dan _sys_nerr