詳解C語言中常用的失敗退出和成功返回
一. 常見的錯(cuò)誤處理方法
perror()
:用來輸出上一個(gè)系統(tǒng)調(diào)用或庫函數(shù)出錯(cuò)時(shí)的錯(cuò)誤信息。它會(huì)輸出當(dāng)前的errno
值對(duì)應(yīng)的錯(cuò)誤描述。exit()
:用于強(qiáng)制退出程序,并返回一個(gè)指定的退出狀態(tài)碼。exit(EXIT_FAILURE)
通常表示程序因錯(cuò)誤而退出,exit(EXIT_SUCCESS)
則表示程序正常退出。return 0
:通常在函數(shù)的返回值為int
類型時(shí),表示函數(shù)執(zhí)行成功(如果返回值為非零,表示錯(cuò)誤)。它通常用于函數(shù)返回調(diào)用結(jié)果時(shí)。錯(cuò)誤處理范例
二. 使用 perror() 輸出錯(cuò)誤信息
#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"); // 輸出錯(cuò)誤信息 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)建一個(gè)套接字,如果失敗,perror()
會(huì)輸出錯(cuò)誤信息,并且使用exit(EXIT_FAILURE)
強(qiáng)制退出程序,表示失敗。- 如果創(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); // 強(qiáng)制退出程序,狀態(tài)碼表示失敗 } printf("Socket created successfully.\n"); close(sock_fd); // 關(guān)閉套接字 } int main() { create_socket(); // 調(diào)用函數(shù) return 0; // 正常返回 }
解釋:
- 當(dāng)
socket()
失敗時(shí),使用perror()
打印錯(cuò)誤信息,之后調(diào)用exit()
退出程序。 - 如果成功,打印提示信息并關(guān)閉套接字。
四.使用 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; // 返回錯(cuò)誤標(biāo)識(shí) } return sock_fd; // 返回成功時(shí)的套接字描述符 } 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); // 關(guān)閉套接字 return 0; // 返回成功狀態(tài) }
解釋:
- 在
create_socket()
函數(shù)中,如果socket()
失敗,返回-1
,代表錯(cuò)誤。 - 主函數(shù)根據(jù)返回值判斷是否創(chuàng)建成功,如果失敗,則輸出錯(cuò)誤消息并返回
EXIT_FAILURE
,表示程序因錯(cuò)誤退出。 - 如果成功,打印成功消息并關(guān)閉套接字。
五.判斷成功與否的常見模式
在實(shí)際開發(fā)中,封裝函數(shù)通常會(huì)采取以下幾種錯(cuò)誤判斷方式:
- 返回值判斷:
- 如果一個(gè)函數(shù)返回一個(gè)狀態(tài)值(比如返回 0 表示成功,返回非零值表示失?。梢酝ㄟ^
if (func() != 0)
來判斷。
- 如果一個(gè)函數(shù)返回一個(gè)狀態(tài)值(比如返回 0 表示成功,返回非零值表示失?。梢酝ㄟ^
- 錯(cuò)誤處理與退出:
- 如果需要處理錯(cuò)誤并終止程序,可以通過
exit(EXIT_FAILURE)
來退出程序。
- 如果需要處理錯(cuò)誤并終止程序,可以通過
- 輸出詳細(xì)的錯(cuò)誤信息:
- 使用
perror()
可以幫助打印詳細(xì)的錯(cuò)誤信息,幫助開發(fā)人員診斷問題。
- 使用
總結(jié)
perror()
:打印詳細(xì)的系統(tǒng)錯(cuò)誤信息,通常用于errno
設(shè)置后的錯(cuò)誤輸出。exit()
:用于程序出現(xiàn)錯(cuò)誤時(shí)退出,并返回特定的退出碼,表示程序運(yùn)行失敗。return 0
或return -1
:在函數(shù)中返回一個(gè)值,用于指示函數(shù)執(zhí)行是否成功。return 0
通常表示成功,return -1
或其他值表示失敗。
這些錯(cuò)誤處理機(jī)制可以幫助你在開發(fā)中處理異常,增強(qiáng)代碼的健壯性和可維護(hù)性。
六.exit() 的用法
void exit(int status);
- status:程序的退出狀態(tài)碼。通常:
- exit(0):表示程序正常結(jié)束(成功退出)。
- exit(EXIT_SUCCESS):這是一個(gè)宏,通常也表示程序成功結(jié)束,效果等同于 exit(0)。
- exit(EXIT_FAILURE):這是一個(gè)宏,表示程序失敗退出,通常用于指示錯(cuò)誤發(fā)生。
返回成功狀態(tài)
在程序執(zhí)行完畢且沒有發(fā)生任何錯(cuò)誤時(shí),使用 exit(0)
或 exit(EXIT_SUCCESS)
來表示程序成功退出。
#include <stdio.h> #include <stdlib.h> int main() { // 執(zhí)行一些操作 printf("Program is running successfully...\n"); // 程序正常結(jié)束,返回成功狀態(tài) exit(EXIT_SUCCESS); // 或者 exit(0); // 這里的代碼不會(huì)執(zhí)行到,因?yàn)槌绦蛞呀?jīng)通過 exit() 退出 return 0; }
成功退出的狀態(tài)碼常見用法
exit(0)
:表示程序正常結(jié)束,沒有發(fā)生錯(cuò)誤。一般而言,返回 0 表示成功,符合 UNIX 和 C 標(biāo)準(zhǔn)的慣例。
exit(EXIT_SUCCESS)
:與 exit(0)
等價(jià),表示程序正常結(jié)束,退出狀態(tài)為成功。
總結(jié)
- 使用
exit(0)
或exit(EXIT_SUCCESS)
來表示程序的成功結(jié)束。 exit()
會(huì)立刻終止程序的執(zhí)行,不會(huì)再執(zhí)行之后的代碼,因此它通常用于在程序運(yùn)行到某個(gè)階段后退出,返回相應(yīng)的狀態(tài)碼。
以上就是詳解C語言中常用的失敗退出和成功返回的詳細(xì)內(nèi)容,更多關(guān)于C語言失敗退出和成功返回的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C++實(shí)現(xiàn)LeetCode(118.楊輝三角)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(118.楊輝三角),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07QT使用canon sdk拍照并保存到本機(jī)的方法示例
這篇文章主要介紹了QT使用canon sdk拍照并保存到本機(jī)的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10C++中類的成員函數(shù)及內(nèi)聯(lián)函數(shù)使用及說明
這篇文章主要介紹了C++中類的成員函數(shù)及內(nèi)聯(lián)函數(shù)使用及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11c++?qt自定義搜索編輯框的實(shí)現(xiàn)方法
這篇文章主要介紹了c++?qt自定義搜索編輯框,通過自定義QLineEdit,在編輯框里添加布局,將按鈕設(shè)置在右邊,當(dāng)點(diǎn)擊按鈕搜索按鈕時(shí)發(fā)送信號(hào)到主界面做相應(yīng)的操作,需要的朋友可以參考下2022-03-03C語言實(shí)現(xiàn)從指定位置截取文件內(nèi)容
這篇文章主要為大家詳細(xì)介紹了如何利用C語言實(shí)現(xiàn)從指定位置截取文件內(nèi)容,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-11-11C語言實(shí)現(xiàn)航班售票系統(tǒng) C語言實(shí)現(xiàn)航班管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)航班售票系統(tǒng),C語言實(shí)現(xiàn)航班管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-12-12