Câu trả lời:
Sự khác biệt giữa exit(0)
và exit(1)
trong ngôn ngữ C là gì?
exit(0)
cho biết kết thúc chương trình thành công & nó hoàn toàn có thể di động, While
exit(1)
(thường) cho biết kết thúc không thành công. Tuy nhiên, cách sử dụng của nó là không di động.
Lưu ý rằng tiêu chuẩn C xác định EXIT_SUCCESS
và EXIT_FAILURE
trả về trạng thái kết thúc từ chương trình C.
0
và EXIT_SUCCESS
là các giá trị được tiêu chuẩn chỉ định để biểu thị kết thúc thành công, tuy nhiên, chỉ EXIT_FAILURE
là giá trị tiêu chuẩn để trả về kết thúc không thành công. 1
được sử dụng giống nhau trong nhiều triển khai.
Tài liệu tham khảo:
Tiêu chuẩn C99: 7.20.4.3 exit
Chức năng
Đoạn 5
Cuối cùng, quyền điều khiển được trả lại cho môi trường máy chủ. Nếu giá trị của trạng thái bằng 0 hoặc
EXIT_SUCCESS
, biểu mẫu thực hiện của trạng thái kết thúc thành công sẽ được trả về. Nếu giá trị của trạng thái làEXIT_FAILURE
, thì sẽ trả về biểu mẫu xác định thực hiện của trạng thái kết thúc không thành công. Nếu không, trạng thái được trả về là implement-de fi ned.
exit
là tối thiểu các mối quan tâm của bạn (địa ngục, có thể thậm chí không có một thư viện C sẵn ở đó. NOTHING IS PORTABLE !!! 111).
exit
với bất kỳ giá trị lẻ nào đều biểu thị thành công. exit(0)
được coi như một trường hợp đặc biệt vì lợi ích của C. Có, POSIX là một tiêu chuẩn, nhưng không phải tất cả các hệ thống đều tuân theo nó. Nếu bạn muốn viết mã giả định là POSIX, bạn có thể tự do làm như vậy, nhưng nó hạn chế tính di động của mã của bạn.
exit
trong ngôn ngữ C nhận một số nguyên biểu thị trạng thái thoát.
Thông thường, trạng thái thoát 0 được coi là thành công, hoặc thoát có chủ ý do chương trình thực hiện thành công.
Trạng thái thoát 1 được coi là lỗi và thường gặp nhất có nghĩa là chương trình phải thoát vì một lý do nào đó và không thể hoàn thành mọi thứ trong dòng chương trình bình thường.
Đây là Tài nguyên GNU nói về Trạng thái thoát.
Như @Als đã nêu, hai hằng số nên được sử dụng thay cho 0 và 1.
EXIT_SUCCESS
được định nghĩa theo tiêu chuẩn là không.
EXIT_FAILURE
không bị giới hạn bởi tiêu chuẩn là một, nhưng nhiều hệ thống thực hiện nó như một.
Sự khác biệt là giá trị được trả lại cho môi trường 0
trong trường hợp trước và 1
trong trường hợp sau:
$ ./prog_with_exit_0
$ echo $?
0
$
và
$ ./prog_with_exit_1
$ echo $?
1
$
Cũng lưu ý rằng giá trị macro EXIT_SUCCESS
và EXIT_FAILURE
được sử dụng làm đối số cho exit
hàm được xác định triển khai nhưng thường được đặt thành tương ứng 0
và một số khác 0. (POSIX yêu cầu EXIT_SUCCESS
là 0). Vì vậy, thường exit(0)
có nghĩa là một thành công và exit(1)
một thất bại.
Một exit
lệnh gọi hàm có đối số trong main
hàm tương đương với câu lệnh return
có cùng đối số.
exit là một lệnh gọi hệ thống được sử dụng để kết thúc một quá trình đang chạy mà từ đó nó được gọi. Tham số để thoát được sử dụng để thông báo cho process cha về trạng thái của process con. Vì vậy, exit (0) có thể được sử dụng (và thường được sử dụng) để chỉ ra việc thực hiện thành công một quy trình và thoát (1) để gắn cờ lỗi. liên kết tham khảo
exit(0)
cư xử như return 0
trong main()
chức năng, exit(1)
cư xử như thế nào return 1
. Tiêu chuẩn là, main
chức năng đó return 0
, nếu chương trình kết thúc thành công trong khi giá trị khác 0 có nghĩa là chương trình đó đã bị kết thúc với một số loại lỗi.
exit (0) tương đương với exit (EXIT_SUCCESS).
exit (1) tương đương với exit (EXIT_FAILURE).
Khi thất bại, thông thường bất kỳ giá trị dương nào sẽ được trả về để thoát khỏi quy trình, mà bạn có thể tìm thấy trên shell bằng cách sử dụng $ ?.
Giá trị lớn hơn 128 được gây ra bởi tín hiệu kết thúc. Vì vậy, nếu bất kỳ lệnh shell nào được kết thúc bằng tín hiệu thì trạng thái trả về phải là (số tín hiệu 128 +).
Ví dụ:
Nếu bất kỳ lệnh shell nào được kết thúc bởi SIGINT thì $? sẽ cho 130 (128 + 2) (Đây 2 là số tín hiệu cho SIGINT, kiểm tra bằng cách sử dụng kill -l)
exit () phải luôn được gọi với giá trị nguyên và các giá trị khác 0 được sử dụng làm mã lỗi.
Xem thêm: Sử dụng hàm exit ()
exit(0)
nghĩa là Chương trình (Quy trình) kết thúc bình thường thành công ..
exit(1)
nghĩa là chương trình (tiến trình) kết thúc bình thường không thành công ..
Nếu bạn muốn quan sát điều này, bạn phải biết xử lý tín hiệu và quản lý quy trình trong Unix ...
biết về sigaction
, watipid()
..cho () ... chẳng hạn .... API ...........
exit function
. Trong Ngôn ngữ lập trình C, hàm thoát gọi tất cả các hàm được đăng ký khi thoát và kết thúc chương trình.
exit(1)
nghĩa là chương trình (tiến trình) kết thúc không thành công.
Bộ đệm tệp bị xóa, luồng bị đóng và tệp tạm thời bị xóa
exit(0)
nghĩa là Chương trình (Process) kết thúc thành công.
EXIT_FAILURE
) là không đủ.