在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C語言中的錯(cuò)誤處理機(jī)制解析

單片機(jī)與嵌入式 ? 來源:?jiǎn)纹瑱C(jī)與嵌入式 ? 2024-02-26 11:19 ? 次閱讀

C 語言不提供對(duì)錯(cuò)誤處理的直接支持,但是作為一種系統(tǒng)編程語言,它以返回值的形式允許您訪問底層數(shù)據(jù)。在發(fā)生錯(cuò)誤時(shí),大多數(shù)的 C 或 UNIX 函數(shù)調(diào)用返回 1 或 NULL,同時(shí)會(huì)設(shè)置一個(gè)錯(cuò)誤代碼errno,該錯(cuò)誤代碼是全局變量,表示在函數(shù)調(diào)用期間發(fā)生了錯(cuò)誤。

您可以在 errno.h 頭文件中找到各種各樣的錯(cuò)誤代碼。

所以,C 程序員可以通過檢查返回值,然后根據(jù)返回值決定采取哪種適當(dāng)?shù)膭?dòng)作。開發(fā)人員應(yīng)該在程序初始化時(shí),把 errno 設(shè)置為 0,這是一種良好的編程習(xí)慣。0 值表示程序中沒有錯(cuò)誤。

errno、perror() 和 strerror()

C 語言提供了perror()strerror()函數(shù)來顯示與errno相關(guān)的文本消息。

perror()函數(shù)顯示您傳給它的字符串,后跟一個(gè)冒號(hào)、一個(gè)空格和當(dāng)前 errno 值的文本表示形式。

strerror()函數(shù),返回一個(gè)指針,指針指向當(dāng)前 errno 值的文本表示形式。

讓我們來模擬一種錯(cuò)誤情況,嘗試打開一個(gè)不存在的文件。您可以使用多種方式來輸出錯(cuò)誤消息,在這里我們使用函數(shù)來演示用法。另外有一點(diǎn)需要注意,您應(yīng)該使用stderr文件流來輸出所有的錯(cuò)誤。

#include 
#include 
#include 

extern int errno ;

int main ()
{
  FILE * pf;
  int errnum;
  pf = fopen ("unexist.txt", "rb");
  if (pf == NULL)
  {
   errnum = errno;
   fprintf(stderr, "錯(cuò)誤號(hào): %d
", errno);
   perror("通過 perror 輸出錯(cuò)誤");
   fprintf(stderr, "打開文件錯(cuò)誤: %s
", strerror( errnum ));
  }
  else
  {
   fclose (pf);
  }
 
  return 0;
}

當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:

錯(cuò)誤號(hào): 2
通過 perror 輸出錯(cuò)誤: No such file or directory
打開文件錯(cuò)誤: No such file or directory

被零除的錯(cuò)誤

在進(jìn)行除法運(yùn)算時(shí),如果不檢查除數(shù)是否為零,則會(huì)導(dǎo)致一個(gè)運(yùn)行時(shí)錯(cuò)誤。

為了避免這種情況發(fā)生,下面的代碼在進(jìn)行除法運(yùn)算前會(huì)先檢查除數(shù)是否為零:

#include 
#include 

main()
{
  int dividend = 20;
  int divisor = 0;
  int quotient;
 
  if( divisor == 0){
   fprintf(stderr, "除數(shù)為 0 退出運(yùn)行...
");
   exit(-1);
  }
  quotient = dividend / divisor;
  fprintf(stderr, "quotient 變量的值為 : %d
", quotient );

  exit(0);
}

當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:

除數(shù)為 0 退出運(yùn)行...

程序退出狀態(tài)

通常情況下,程序成功執(zhí)行完一個(gè)操作正常退出的時(shí)候會(huì)帶有值 EXIT_SUCCESS。在這里,EXIT_SUCCESS 是宏,它被定義為 0。

如果程序中存在一種錯(cuò)誤情況,當(dāng)您退出程序時(shí),會(huì)帶有狀態(tài)值 EXIT_FAILURE,被定義為 -1。所以,上面的程序可以寫成:

#include 
#include 

main()
{
  int dividend = 20;
  int divisor = 5;
  int quotient;
 
  if( divisor == 0){
   fprintf(stderr, "除數(shù)為 0 退出運(yùn)行...
");
   exit(EXIT_FAILURE);
  }
  quotient = dividend / divisor;
  fprintf(stderr, "quotient 變量的值為: %d
", quotient );

  exit(EXIT_SUCCESS);
}

當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:

quotient 變量的值為 : 4



審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7630

    瀏覽量

    140682
  • 編程語言
    +關(guān)注

    關(guān)注

    10

    文章

    1955

    瀏覽量

    36249
  • 函數(shù)調(diào)用
    +關(guān)注

    關(guān)注

    0

    文章

    19

    瀏覽量

    2656

原文標(biāo)題:C語言中的錯(cuò)誤處理機(jī)制

文章出處:【微信號(hào):?jiǎn)纹瑱C(jī)與嵌入式,微信公眾號(hào):?jiǎn)纹瑱C(jī)與嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    嵌入式編程錯(cuò)誤處理機(jī)制設(shè)計(jì)

    本文主要總結(jié)嵌入式系統(tǒng)C語言編程中,主要的錯(cuò)誤處理方式。文中涉及的代碼運(yùn)行環(huán)境如下。
    發(fā)表于 04-28 09:59 ?965次閱讀
    嵌入式編程<b class='flag-5'>錯(cuò)誤處理機(jī)制</b>設(shè)計(jì)

    嵌入式系統(tǒng)C語言編程中主要的錯(cuò)誤處理方式

    本文主要總結(jié)嵌入式系統(tǒng)C語言編程中,主要的錯(cuò)誤處理方式。
    發(fā)表于 07-24 16:40 ?1228次閱讀
    嵌入式系統(tǒng)<b class='flag-5'>C</b><b class='flag-5'>語言</b>編程中主要的<b class='flag-5'>錯(cuò)誤處理</b>方式

    Rust語言中錯(cuò)誤處理機(jī)制

    可能的錯(cuò)誤,實(shí)際運(yùn)行中仍然可能出現(xiàn)各種各樣的錯(cuò)誤,比如文件不存在、網(wǎng)絡(luò)連接失敗等等。對(duì)于這些不可預(yù)測(cè)的錯(cuò)誤,我們必須使用錯(cuò)誤處理機(jī)制來進(jìn)行處理
    的頭像 發(fā)表于 09-19 14:54 ?1825次閱讀

    嵌入式C編程常用的異常錯(cuò)誤處理

    (Exception Handling) 雖然C語言本身不支持異常處理,但可以通過結(jié)構(gòu)化的錯(cuò)誤處理機(jī)制來模擬異常處理。 6. 日
    發(fā)表于 08-06 14:32

    labviEW錯(cuò)誤處理的問題

    為什么這個(gè)程序在啟用自動(dòng)錯(cuò)誤處理C:\data.txt不存在的情況下,沒有顯示錯(cuò)誤對(duì)話框啊?
    發(fā)表于 04-01 10:03

    INtime RTOS內(nèi)部的關(guān)鍵處理機(jī)制是什么

    INtime RTOS內(nèi)部的關(guān)鍵處理機(jī)制是什么?INtime RTOS內(nèi)部的關(guān)鍵處理機(jī)制有哪些相關(guān)的應(yīng)用案例?
    發(fā)表于 09-29 06:28

    C語言和匯編語言混合編程方法和C語言中處理方法

    C語言和匯編語言混合編程方法和C語言中處理方法,new
    發(fā)表于 01-06 14:36 ?36次下載

    LabVIEW中的錯(cuò)誤處理

    如何合理使用 LabVIEW 中的自定義錯(cuò)誤處理功能;對(duì)于可預(yù)見的錯(cuò)誤,是否可以選擇直 接忽略,或者前幾次嘗試忽略直到該特定錯(cuò)誤出現(xiàn)很多次后才通知用戶需要糾正該錯(cuò)誤 了;是否可以對(duì)
    發(fā)表于 05-24 11:07 ?6次下載

    C語言教程之C語言中級(jí)培訓(xùn)教程—預(yù)處理電子課件免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是C語言教程之C語言中級(jí)培訓(xùn)教程—預(yù)處理電子課件免費(fèi)下載
    發(fā)表于 09-04 17:11 ?0次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>教程之<b class='flag-5'>C</b><b class='flag-5'>語言中</b>級(jí)培訓(xùn)教程—預(yù)<b class='flag-5'>處理</b>電子課件免費(fèi)下載

    嵌入式系統(tǒng)C語言編程中的錯(cuò)誤處理資料總結(jié)

    本文主要總結(jié)嵌入式系統(tǒng)C語言編程中,主要的錯(cuò)誤處理方式。文中涉及的代碼運(yùn)行環(huán)境如下:
    發(fā)表于 11-28 10:39 ?2092次閱讀

    C++程序異常處理機(jī)制是什么

    那么C++設(shè)計(jì)了一套異常處理機(jī)制,一方面能夠使得異常處理和正常運(yùn)行代碼進(jìn)行分離,使得程序更加模塊化;另一方面,C++的異常處理可以不需要異常
    的頭像 發(fā)表于 02-21 10:37 ?1111次閱讀
    <b class='flag-5'>C</b>++程序異常<b class='flag-5'>處理機(jī)制</b>是什么

    C++異常機(jī)制解析

    傳統(tǒng)排錯(cuò) 我們?cè)缭?C 程序里面?zhèn)鹘y(tǒng)的錯(cuò)誤處理手段有: 終止程序,如 assert;缺陷是用戶難以接受,說白了就是一種及其粗暴的手法,比如發(fā)生內(nèi)存錯(cuò)誤,除0錯(cuò)誤時(shí)就會(huì)終止程序。 返回
    的頭像 發(fā)表于 11-09 14:16 ?602次閱讀
    <b class='flag-5'>C</b>++異常<b class='flag-5'>機(jī)制</b><b class='flag-5'>解析</b>

    西門子博圖:錯(cuò)誤處理機(jī)制概覽

    可通過以下幾種不同的錯(cuò)誤處理機(jī)制進(jìn)行參數(shù)跟蹤或編程或訪問錯(cuò)誤
    的頭像 發(fā)表于 11-25 11:35 ?3907次閱讀
    西門子博圖:<b class='flag-5'>錯(cuò)誤處理機(jī)制</b>概覽

    介紹C語言中錯(cuò)誤處理和異常處理的一些常用的方法和策略

    C語言是一種低級(jí)的、靜態(tài)的、結(jié)構(gòu)化的編程語言,它沒有提供像C++或Java等高級(jí)語言中的異常處理機(jī)制
    的頭像 發(fā)表于 02-28 14:25 ?921次閱讀

    socket編程中的錯(cuò)誤處理技巧

    Socket編程是網(wǎng)絡(luò)編程的基礎(chǔ),它允許程序之間通過TCP/IP協(xié)議進(jìn)行通信。然而,網(wǎng)絡(luò)通信是不穩(wěn)定的,可能會(huì)遇到各種問題,如網(wǎng)絡(luò)延遲、連接中斷、數(shù)據(jù)丟失等。 錯(cuò)誤處理的重要性 提高程序的健壯性
    的頭像 發(fā)表于 11-01 17:47 ?1462次閱讀
    主站蜘蛛池模板: 女的扒开尿口让男人桶 | 生活片黄色 | 夜夜想夜夜爽天天爱天天摸 | 欧美综合精品一区二区三区 | julia一区二区三区中文字幕 | 国内自拍 亚洲系列 欧美系列 | 午夜激情福利视频 | 神马影院午夜在线 | 性xxxxfreexxxxx国产 | 亚洲三级网址 | youjizz国产 | 黄色在线 | 久草免费在线播放 | 人人插人人射 | 亚洲人成人| 99久久久免费精品免费 | 久久久久久亚洲精品 | 人人艹人人草 | 69日本xxxxxxxxx98| 美女被视频网站在线看九色 | 亚洲电影一区二区三区 | 中日韩精品视频在线观看 | 黄色网页在线观看 | 1024手机在线观看你懂的 | 免费一看一级毛片 | 天天操天天干天天操 | 中文字幕精品一区影音先锋 | 最新午夜 | 亚洲夂夂婷婷色拍ww47 | 欧美乱码视频 | 乱码一区二区三区完整视频 | 午夜88| 一级做a爱免费观看视频 | 午夜欧美精品久久久久久久 | 泰国一级毛片aaa下面毛多 | 中国国产aa一级毛片 | 亚洲欧洲一区二区三区在线观看 | 亚洲久久久 | 在线免费看高清视频大全 | 久久久久久久久久免观看 | h网站亚洲|