Sau khi lập trình trong C trong nhiều năm, tôi nhận ra rằng tôi đã bỏ qua quy ước C về việc trả về số không từ một hàm để biểu thị thành công. Công ước có vẻ sai trái về mặt ngữ nghĩa đối với tôi, vì không phải tất nhiên là sai. Vấn đề là tôi muốn đặt tên cho các chức năng như is_valid_foobar()
, và để chứa các quy ước của 'có nghĩa là sai thành công', tôi sẽ phải mơ hồ hơn ... đó là thay vì:Tôi có nên trả về giá trị TRUE/FALSE từ một hàm C không?
if (! is_valid_foobar()) {
return (error);
}
lập trình khác viết:
if (validate_foobar()) {
return (error);
}
Và thực hiện của tôi trông giống như:
int is_valid_foobar (int foobar) {
if (foobar < MAX_ALLOWED) {
return TRUE;
}
return FALSE;
}
tôi đã không thực sự bắt bất cứ pháo phòng không cho điều này trong mã số nhận xét. Vì vậy, tôi nghĩ rằng nó không phải là một thói quen khủng khiếp như vậy, nhưng nó là 'độc đáo'. Tôi tò mò những gì mọi người nghĩ.
Tôi rất cẩn thận về các lựa chọn tôi thực hiện cho chức năng và tên biến, và bình luận đánh giá điển hình là "mã thực sự rõ ràng", và hơn nữa nó không làm phiền tôi chút nào phải gõ thêm !
ở phía trước của cuộc gọi chức năng. Nhưng những gì nói lên, những người hùng mạnh của S.O?
Quyền - và nếu bạn không thích trực tiếp sử dụng 0 để thành công, thì thường khung hoặc nền tảng cung cấp một cái gì đó giống như một giá trị/giá trị ERROR_SUCCESS (hoặc tên thú vị) (cùng với tên mã lỗi tương ứng) để trừu tượng ra khỏi số giá trị phần nào. –
Cách sử dụng này cũng cho phép xây dựng "if (int e = foo()) {/ * xử lý lỗi * /};", có thể trông rất khó khăn đối với những người được nêu trên nhiều ngôn ngữ có tính năng hơn, nhưng sạch sẽ và gọn gàng theo tiêu chuẩn c. – dmckee