2012-03-03 33 views
35

thể trùng lặp:
Error handling in C code
What return value should you use for a failed function call in C?Tôi có nên trả lại 0 hoặc 1 cho chức năng thành công không?

tôi luôn luôn sử dụng 0, nhưng nó không thực sự có thể đọc được trong khi, trong khi, vv

tôi có nên trở lại 1? Tại sao chức năng chính trả về 0 để thành công?

+1

Câu hỏi được liên kết đã bị đóng. – bernie

+0

@AdamBernier: Là bản sao. Nó có một số câu trả lời có liên quan cao. –

+0

@Oli: có vẻ như không phù hợp khi câu hỏi khác đã bị đóng là trùng lặp (có thể tôi không thấy nó). Tuy nhiên tôi đồng ý với việc đóng cái đó và cái này: Các câu hỏi dường như quá mở cho trang web cụ thể này. – bernie

Trả lời

33

Được xác định bằng tiêu chuẩn C là 0 để thành công (tín dụng đi tới hvd).

But

Đối với tính di động cao hơn, bạn có thể sử dụng các macro EXIT_SUCCESS và EXIT_FAILURE cho giá trị tình trạng thông thường cho sự thành công và thất bại , tương ứng. Chúng được khai báo trong tệp stdlib.h.

(Tôi đang nói về giá trị trả về cho hệ điều hành từ chính, thoát hoặc cuộc gọi tương tự)

Đối với chức năng của mình, trở về những gì bạn muốn và làm cho mã dễ đọc hơn, như miễn là bạn giữ nó theo cách đó dọc theo chương trình của bạn.

+0

0 luôn có nghĩa là thành công, nhưng các mã thoát khác cũng được phép có nghĩa là thành công tùy thuộc vào hệ thống. – hvd

+0

@hvd Điều đó không đúng. Các giá trị của 'EXIT_SUCCESS' &' EXIT_FAILURE' không được định nghĩa trong tiêu chuẩn C. –

+2

@AndrewMarshall 'EXIT_SUCCESS' có thể có một số giá trị khác 0, nhưng ngay cả khi đó,' return 0; '* cũng * có nghĩa là thành công. – hvd

-4

Nếu bạn đang trả lại trạng thái boolean, thì bạn có thể nhập một số int và sử dụng điều đó. Điều này làm cho kiểu trả về của các hàm của bạn hiển nhiên và bạn (và những người khác) sẽ không phải kiểm tra xem nó có trả về 0 hay 1 cho tốt.

typedef int BOOL; 
#ifndef TRUE 
#define TRUE 1 
#endif 

#ifndef FALSE 
#define FALSE 0 
#endif 

BOOL myfunc() 
{ 
    ... 
    return TRUE; 
} 
+9

Tại sao bạn sẽ tạo lại loại 'bool' chuẩn? – hvd

+0

@hvd Tôi nghĩ rằng đó sẽ là một sai lầm vì bạn sẽ gặp lỗi nếu bạn đã biên dịch mã chống lại C++ trong tương lai. Bạn có thể chọn tên khác của khóa học, ví dụ 'bool_t' hoặc một cái gì đó. – trojanfoe

+2

Cả hai trong C và trong C++, bạn có thể '#include ' và sử dụng kiểu 'bool' mà không tự định nghĩa nó như là một typedef.Trong C++ bạn không cần '', nhưng nó được cho phép và vô hại, và dễ dàng được bao bọc trong '#ifdef __cplusplus' nếu cần. – hvd

10

Lý do tại sao main sử dụng 0 để thành công là nó được sử dụng làm mã thoát của ứng dụng cho hệ điều hành, trong đó 0 thường có nghĩa là thành công và 1 (hoặc cao hơn) có nghĩa là không thành công. (Tất nhiên, bạn phải luôn sử dụng các macro được xác định trước EXIT_SUCCESSEXIT_FAILURE.)

Tự động sử dụng số không vì thất bại và không thành công vì giá trị trả lại có thể được sử dụng trực tiếp trong an if như sau:

if (my_func()) 
{ 
    ... 
} 
Các vấn đề liên quan