Sự khác biệt giữa lối ra (0) và lối ra (1) trong C là gì?


96

Có ai có thể cho tôi biết được không? Sự khác biệt giữa exit(0)exit(1)trong ngôn ngữ C là gì?

Câu trả lời:


117

Sự khác biệt giữa exit(0)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_SUCCESSEXIT_FAILUREtrả về trạng thái kết thúc từ chương trình C.

0EXIT_SUCCESSlà 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_FAILURElà 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 exitChứ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.


1
Bạn có thể giải thích về tính không di động? Đặc biệt, các mã thoát khác không cho biết các chế độ lỗi khác nhau. Ứng dụng thường sử dụng điều này để cung cấp thêm thông tin. Do đó, một hằng số duy nhất ( EXIT_FAILURE) là không đủ.
Konrad Rudolph

@KonradRudolph: Tôi đã thêm trích dẫn có liên quan. Hy vọng rằng sẽ giúp.
Alok Save

1
@Als: POSIX là một tiêu chuẩn. Tiêu chuẩn C có thể nói "thực hiện xác định", nhưng đó không phải là tương đương với nói "không di động", khi triển khai trên thực tế làm thỏa thuận về quy ước.
Cat Plus Plus

1
@PeterM: Tìm cho tôi một nền tảng không sử dụng quy ước này. Đó là khả năng là một số chuyên / nhúng / freestanding / bất cứ môi trường, nơi mà tính di động của exitlà 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 một thư viện C sẵn ở đó. NOTHING IS PORTABLE !!! 111).
Cat Plus Plus

3
@CatPlusPlus: Trên OpenVMS, gọi exitvớ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.
Keith Thompson

12

exit trong ngôn ngữ C nhận một số nguyên biểu thị trạng thái thoát.

Thoát thành công

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.

Thoát không 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.


9

exit(0)cho biết rằng chương trình đã kết thúc mà không có lỗi. exit(1)chỉ ra rằng có một lỗi.

Bạn có thể sử dụng các giá trị khác 1nhau để phân biệt giữa các loại lỗi khác nhau.


3

Sự khác biệt là giá trị được trả lại cho môi trường 0trong trường hợp trước và 1trong trường hợp sau:

$ ./prog_with_exit_0
$ echo $?
0
$

$ ./prog_with_exit_1
$ echo $?
1
$

Cũng lưu ý rằng giá trị macro EXIT_SUCCESSEXIT_FAILUREđược sử dụng làm đối số cho exithàm được xác định triển khai nhưng thường được đặt thành tương ứng 0và một số khác 0. (POSIX yêu cầu EXIT_SUCCESSlà 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 exitlệnh gọi hàm có đối số trong mainhàm tương đương với câu lệnh returncó cùng đối số.


2

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


1

exit(0)cư xử như return 0trong main()chức năng, exit(1)cư xử như thế nào return 1. Tiêu chuẩn là, mainchứ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.


1

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)


0

Khi tệp thực thi kết thúc (thoát), nó trả về một giá trị cho trình bao đã chạy nó. exit(0)thường chỉ ra rằng tất cả đều tốt, trong khi exit(1)chỉ ra rằng có điều gì đó không ổn.



0

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 ...........


0

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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.