詳解C語言中常用的失敗退出和成功返回
一. 常見的錯誤處理方法
perror():用來輸出上一個系統(tǒng)調用或庫函數出錯時的錯誤信息。它會輸出當前的errno值對應的錯誤描述。exit():用于強制退出程序,并返回一個指定的退出狀態(tài)碼。exit(EXIT_FAILURE)通常表示程序因錯誤而退出,exit(EXIT_SUCCESS)則表示程序正常退出。return 0:通常在函數的返回值為int類型時,表示函數執(zhí)行成功(如果返回值為非零,表示錯誤)。它通常用于函數返回調用結果時。錯誤處理范例
二. 使用 perror() 輸出錯誤信息
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
int create_socket() {
int sock_fd = socket(AF_INET, SOCK_STREAM, 0);
if (sock_fd == -1) {
perror("socket"); // 輸出錯誤信息
exit(EXIT_FAILURE); // 退出程序,返回失敗狀態(tài)
}
return sock_fd;
}
int main() {
int sock = create_socket();
printf("Socket created successfully: %d\n", sock);
return 0;
}解釋:
socket()創(chuàng)建一個套接字,如果失敗,perror()會輸出錯誤信息,并且使用exit(EXIT_FAILURE)強制退出程序,表示失敗。- 如果創(chuàng)建成功,返回套接字描述符。
三.使用 exit() 退出程序
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
void create_socket() {
int sock_fd = socket(AF_INET, SOCK_STREAM, 0);
if (sock_fd == -1) {
perror("socket");
exit(EXIT_FAILURE); // 強制退出程序,狀態(tài)碼表示失敗
}
printf("Socket created successfully.\n");
close(sock_fd); // 關閉套接字
}
int main() {
create_socket(); // 調用函數
return 0; // 正常返回
}解釋:
- 當
socket()失敗時,使用perror()打印錯誤信息,之后調用exit()退出程序。 - 如果成功,打印提示信息并關閉套接字。
四.使用 return 0 或 return -1 判斷成功或失敗
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
int create_socket() {
int sock_fd = socket(AF_INET, SOCK_STREAM, 0);
if (sock_fd == -1) {
perror("socket");
return -1; // 返回錯誤標識
}
return sock_fd; // 返回成功時的套接字描述符
}
int main() {
int sock = create_socket();
if (sock == -1) {
printf("Socket creation failed.\n");
return EXIT_FAILURE; // 返回失敗狀態(tài)
}
printf("Socket created successfully.\n");
close(sock); // 關閉套接字
return 0; // 返回成功狀態(tài)
}解釋:
- 在
create_socket()函數中,如果socket()失敗,返回-1,代表錯誤。 - 主函數根據返回值判斷是否創(chuàng)建成功,如果失敗,則輸出錯誤消息并返回
EXIT_FAILURE,表示程序因錯誤退出。 - 如果成功,打印成功消息并關閉套接字。
五.判斷成功與否的常見模式
在實際開發(fā)中,封裝函數通常會采取以下幾種錯誤判斷方式:
- 返回值判斷:
- 如果一個函數返回一個狀態(tài)值(比如返回 0 表示成功,返回非零值表示失?。?,可以通過
if (func() != 0)來判斷。
- 如果一個函數返回一個狀態(tài)值(比如返回 0 表示成功,返回非零值表示失?。?,可以通過
- 錯誤處理與退出:
- 如果需要處理錯誤并終止程序,可以通過
exit(EXIT_FAILURE)來退出程序。
- 如果需要處理錯誤并終止程序,可以通過
- 輸出詳細的錯誤信息:
- 使用
perror()可以幫助打印詳細的錯誤信息,幫助開發(fā)人員診斷問題。
- 使用
總結
perror():打印詳細的系統(tǒng)錯誤信息,通常用于errno設置后的錯誤輸出。exit():用于程序出現(xiàn)錯誤時退出,并返回特定的退出碼,表示程序運行失敗。return 0或return -1:在函數中返回一個值,用于指示函數執(zhí)行是否成功。return 0通常表示成功,return -1或其他值表示失敗。
這些錯誤處理機制可以幫助你在開發(fā)中處理異常,增強代碼的健壯性和可維護性。
六.exit() 的用法
void exit(int status);
- status:程序的退出狀態(tài)碼。通常:
- exit(0):表示程序正常結束(成功退出)。
- exit(EXIT_SUCCESS):這是一個宏,通常也表示程序成功結束,效果等同于 exit(0)。
- exit(EXIT_FAILURE):這是一個宏,表示程序失敗退出,通常用于指示錯誤發(fā)生。
返回成功狀態(tài)
在程序執(zhí)行完畢且沒有發(fā)生任何錯誤時,使用 exit(0) 或 exit(EXIT_SUCCESS) 來表示程序成功退出。
#include <stdio.h>
#include <stdlib.h>
int main() {
// 執(zhí)行一些操作
printf("Program is running successfully...\n");
// 程序正常結束,返回成功狀態(tài)
exit(EXIT_SUCCESS); // 或者 exit(0);
// 這里的代碼不會執(zhí)行到,因為程序已經通過 exit() 退出
return 0;
}成功退出的狀態(tài)碼常見用法
exit(0):表示程序正常結束,沒有發(fā)生錯誤。一般而言,返回 0 表示成功,符合 UNIX 和 C 標準的慣例。
exit(EXIT_SUCCESS):與 exit(0) 等價,表示程序正常結束,退出狀態(tài)為成功。
總結
- 使用
exit(0)或exit(EXIT_SUCCESS)來表示程序的成功結束。 exit()會立刻終止程序的執(zhí)行,不會再執(zhí)行之后的代碼,因此它通常用于在程序運行到某個階段后退出,返回相應的狀態(tài)碼。
以上就是詳解C語言中常用的失敗退出和成功返回的詳細內容,更多關于C語言失敗退出和成功返回的資料請關注腳本之家其它相關文章!
相關文章
C語言實現(xiàn)航班售票系統(tǒng) C語言實現(xiàn)航班管理系統(tǒng)
這篇文章主要為大家詳細介紹了C語言實現(xiàn)航班售票系統(tǒng),C語言實現(xiàn)航班管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-12-12

