Zero thường có nghĩa là thành công vì 0 là giá trị nguyên duy nhất đánh giá sai. Tất cả các giá trị số nguyên khác được đánh giá là đúng và chúng có nghĩa là cho các mã lỗi khác nhau.
Nó có vẻ hơi kỳ quặc và ngược lại, nhưng vì thành công chỉ là thành công và sai sót có thể khác, nên quy ước trên được chọn thường xuyên.
Thực tế, đây là quy ước hợp lý nhất nếu giá trị trả về của một hàm được sử dụng không chỉ như một chỉ báo thành công/thất bại, mà còn là một mã lỗi. Nếu mã lỗi được lưu trữ, hãy nói trong một tham số đầu ra bổ sung, sau đó trả lại 1
để thành công và 0
cho sự thất bại có ý nghĩa hơn.
Hãy tưởng tượng những gì tình trạng này sẽ là trong trường hợp của 0
là thành công:
if (errcode = func()) {
/* error handling */
}
so với cồng kềnh hơn:
if ((errcode = func()) != 1) {
/* error handling */
}
Nguồn
2011-09-20 10:23:08
Lý do lịch sử. Lần cuối cùng điều này xuất hiện không ai có câu trả lời dứt khoát: http://stackoverflow.com/q/329950/184998 –
Câu trả lời thứ hai và thứ tư trong liên kết trên thực sự tốt. –