errno
sebenarnya nilai tidak ditentukan oleh standar C dan C++. Jadi tidak ada cara untuk mengembalikan bilangan bulat (positif) tertentu dan menjaminnya agar tidak berbenturan dengan bilangan bulat yang digunakan implementasi. Standar C hanya memerlukan tiga marco:
Draf C11, 7.5 Kesalahan
Makro adalah
EDOM
EILSEQ
ERANGyang diperluas ke ekspresi konstanta bilangan bulat dengan tipe int, nilai positif berbeda, dan cocok untuk digunakan dalam #if preprocessingdirectives;
Jadi Anda tidak tahu apa errno
lainnya nilai didefinisikan dalam implementasi Anda.
errno
nilai adalah bilangan bulat postif dalam standar C dan POSIX. Jadi Anda bisa menggunakan pencacahan Anda sendiri dengan nilai negatif untuk menentukan nomor kesalahan Anda sendiri. Tetapi Anda tidak dapat menggunakan antarmuka strerror/perror. Jadi, Anda mungkin memerlukan pembungkus tambahan untuk strerror/perror untuk menginterpretasikan nomor kesalahan Anda sendiri.
Sesuatu seperti:
enum myErrors{
ERR1 = -1,
ERR2 = -2,
...
ERR64 = -64
};
char *my_strerror(int e)
{
if (e>=ERR1 && e<=ERR2)
return decode_myerror(e); // decode_myerror can have a map for
//your error numbers and return string representing 'e'.
else
return strerror(e);
}
dan yang serupa untuk perror
.
Catatan Anda juga harus mengatur errno
ke 0
sebelum memanggil "sumber daya terbuka" Anda untuk memastikan errno
memang diatur oleh fungsi Anda.
Saya akan menghindari errno standar sama sekali dalam situasi seperti ini dan menentukan pencacahan saya sendiri untuk kesalahan. Anda dapat melakukannya jika "sumber daya terbuka" Anda tidak terlalu rumit dan mengembalikan terlalu banyak kemungkinan kode kesalahan.