errno
, _doserrno
, _sys_errlist
, dan _sys_nerr
Makro global yang menyimpan kode kesalahan yang diatur selama eksekusi program, dan string yang setara dengan kode kesalahan untuk ditampilkan.
Sintaks
#define errno (*_errno())
#define _doserrno (*__doserrno())
#define _sys_errlist (__sys_errlist())
#define _sys_nerr (*__sys_nerr())
Keterangan
Keduanya errno
dan _doserrno
diatur ke 0 oleh runtime selama startup program. errno
diatur pada kesalahan dalam panggilan tingkat sistem. Karena errno
menyimpan nilai untuk panggilan terakhir yang mengaturnya, nilai ini dapat diubah dengan berhasil memanggil. Panggilan pustaka run-time yang diatur errno
pada kesalahan tidak dihapus errno
saat berhasil. Selalu bersihkan errno
_set_errno(0)
dengan memanggil segera sebelum panggilan yang dapat mengaturnya, dan periksa segera setelah panggilan.
Pada kesalahan, errno
tidak selalu diatur ke nilai yang sama dengan kode kesalahan yang dikembalikan oleh panggilan sistem. Untuk operasi I/O, _doserrno
menyimpan kode kesalahan sistem operasi yang setara errno
dengan kode. Untuk sebagian besar operasi non-I/O, nilai _doserrno
tidak ditetapkan.
Setiap errno
nilai dikaitkan dengan pesan kesalahan dalam yang dapat dicetak _sys_errlist
dengan menggunakan salah perror
satu fungsi, atau disimpan dalam string dengan menggunakan salah strerror
satu fungsi atau strerror_s
. Fungsi perror
dan strerror
menggunakan _sys_errlist
array dan _sys_nerr
—jumlah elemen dalam _sys_errlist
—untuk memproses informasi kesalahan. Akses langsung ke _sys_errlist
dan _sys_nerr
tidak digunakan lagi karena alasan keamanan kode. Kami menyarankan agar Anda menggunakan versi fungsional yang lebih aman alih-alih makro global, seperti yang ditunjukkan di sini:
Makro global | Setara fungsional |
---|---|
_doserrno |
_get_doserrno , _set_doserrno |
errno |
_get_errno , _set_errno |
_sys_errlist , _sys_nerr |
strerror_s , _strerror_s , _wcserror_s , __wcserror_s |
Rutinitas matematika pustaka diatur errno
dengan memanggil _matherr
. Untuk menangani kesalahan matematika secara berbeda, tulis rutinitas Anda sendiri sesuai dengan _matherr
deskripsi referensi dan beri nama _matherr
.
Semua errno
nilai adalah konstanta yang telah ditentukan sebelumnya di <errno.h>
, dan kompatibel dengan UNIX. Hanya ERANGE
, EILSEQ
, dan EDOM
ditentukan dalam standar ISO C99. Untuk daftar lengkapnya, lihat errno
konstanta.
Persyaratan
Makro global | Header yang diperlukan | Header opsional |
---|---|---|
errno |
<errno.h> atau <stdlib.h> , <cerrno> atau <cstdlib> (C++) |
|
_doserrno , _sys_errlist , _sys_nerr |
<stdlib.h> , <cstdlib> (C++) |
<errno.h> , <cerrno> (C++) |
Makro _doserrno
, _sys_errlist
, dan _sys_nerr
adalah ekstensi Microsoft. Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.
Baca juga
Variabel global
errno
Konstanta
perror
, _wperror
strerror
, _strerror
, _wcserror
, __wcserror
strerror_s
, _strerror_s
, _wcserror_s
, __wcserror_s
_get_doserrno
_set_doserrno
_get_errno
_set_errno
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk