Mengapa kode kesalahan dinegasikan?

12

Sangat sering saya melihat negasi kode C dari kode kesalahan yang dikembalikan, misalnya return -EINVALbukan return EINVAL. Mengapa menggunakan negasi?


sumber

Jawaban:

8

Pada banyak UNIXen, konvensi untuk syscalls adalah mereka mengembalikan kode kesalahan yang dinegasikan jika terjadi kesalahan, dan nilai aktual jika berhasil.

Ini diterjemahkan pada sisi ruang pengguna -1untuk kesalahan dengan kode kesalahan positif di errno, atau nilai aktual jika sukses.

Kebutuhan untuk tujuan ganda dari nilai pengembalian adalah karena pengembalian ganda dalam jenis bahasa ini merepotkan, karena Anda harus menggunakan parameter keluar untuk menahan kesalahan akhirnya.

Lars Viklund
sumber
4

Itu adalah konvensi; banyak fungsi mengembalikan hasil yang sangat positif pada kesuksesan dan hasil negatif pada kegagalan. Awalnya, itu terkait dengan kode pengembalian proses Unix. Keberhasilan ditunjukkan oleh 0.

md5
sumber