欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解C語言中常用的失敗退出和成功返回

 更新時(shí)間:2024年12月15日 09:54:08   作者:程序加冰  
在 C 語言中,封裝函數(shù)時(shí),我們通常需要判斷函數(shù)調(diào)用是否成功,并據(jù)此采取不同的操作,例如,在調(diào)用系統(tǒng)函數(shù)或庫函數(shù)時(shí),我們通常會(huì)使用一些錯(cuò)誤處理機(jī)制,來輸出錯(cuò)誤信息、退出程序或返回不同的狀態(tài),以下是如何參考使用這些錯(cuò)誤處理機(jī)制的示例,需要的朋友可以參考下

一. 常見的錯(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ò)誤判斷方式:

  1. 返回值判斷
    • 如果一個(gè)函數(shù)返回一個(gè)狀態(tài)值(比如返回 0 表示成功,返回非零值表示失?。梢酝ㄟ^ if (func() != 0) 來判斷。
  2. 錯(cuò)誤處理與退出
    • 如果需要處理錯(cuò)誤并終止程序,可以通過 exit(EXIT_FAILURE) 來退出程序。
  3. 輸出詳細(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.楊輝三角)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(118.楊輝三角),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • QT使用canon sdk拍照并保存到本機(jī)的方法示例

    QT使用canon sdk拍照并保存到本機(jī)的方法示例

    這篇文章主要介紹了QT使用canon sdk拍照并保存到本機(jī)的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • 淺談C++ 基類指針和子類指針的相互賦值

    淺談C++ 基類指針和子類指針的相互賦值

    下面小編就為大家?guī)硪黄獪\談C++ 基類指針和子類指針的相互賦值。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-12-12
  • C++中類的成員函數(shù)及內(nèi)聯(lián)函數(shù)使用及說明

    C++中類的成員函數(shù)及內(nèi)聯(lián)函數(shù)使用及說明

    這篇文章主要介紹了C++中類的成員函數(shù)及內(nèi)聯(lián)函數(shù)使用及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • c++?qt自定義搜索編輯框的實(shí)現(xiàn)方法

    c++?qt自定義搜索編輯框的實(shí)現(xiàn)方法

    這篇文章主要介紹了c++?qt自定義搜索編輯框,通過自定義QLineEdit,在編輯框里添加布局,將按鈕設(shè)置在右邊,當(dāng)點(diǎn)擊按鈕搜索按鈕時(shí)發(fā)送信號(hào)到主界面做相應(yīng)的操作,需要的朋友可以參考下
    2022-03-03
  • C++中類的轉(zhuǎn)換函數(shù)你了解嗎

    C++中類的轉(zhuǎn)換函數(shù)你了解嗎

    這篇文章主要為大家詳細(xì)介紹了C++中類的轉(zhuǎn)換函數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • C語言實(shí)現(xiàn)從指定位置截取文件內(nèi)容

    C語言實(shí)現(xiàn)從指定位置截取文件內(nèi)容

    這篇文章主要為大家詳細(xì)介紹了如何利用C語言實(shí)現(xiàn)從指定位置截取文件內(nèi)容,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11
  • C語言并查集的非遞歸實(shí)現(xiàn)詳解

    C語言并查集的非遞歸實(shí)現(xiàn)詳解

    以下是對(duì)C語言并查集的遞歸實(shí)現(xiàn)與非遞歸實(shí)現(xiàn)代碼進(jìn)行了詳細(xì)的介紹,需要的朋友可以過來參考下,希望能夠給你帶來幫助
    2021-09-09
  • C語言實(shí)現(xiàn)航班售票系統(tǒng) C語言實(shí)現(xiàn)航班管理系統(tǒng)

    C語言實(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
  • C++ COM編程之什么是接口?

    C++ COM編程之什么是接口?

    這篇文章主要介紹了C++ COM編程之什么是接口?在C++中,可以使用抽象基類來實(shí)現(xiàn)COM接口,需要的朋友可以參考下
    2014-10-10

最新評(píng)論