0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C语言中的错误处理机制解析

单片机与嵌入式 来源:单片机与嵌入式 2024-02-26 11:19 次阅读

C 语言不提供对错误处理的直接支持,但是作为一种系统编程语言,它以返回值的形式允许您访问底层数据。在发生错误时,大多数的 C 或 UNIX 函数调用返回 1 或 NULL,同时会设置一个错误代码errno,该错误代码是全局变量,表示在函数调用期间发生了错误。

您可以在 errno.h 头文件中找到各种各样的错误代码。

所以,C 程序员可以通过检查返回值,然后根据返回值决定采取哪种适当的动作。开发人员应该在程序初始化时,把 errno 设置为 0,这是一种良好的编程习惯。0 值表示程序中没有错误。

errno、perror() 和 strerror()

C 语言提供了perror()strerror()函数来显示与errno相关的文本消息。

perror()函数显示您传给它的字符串,后跟一个冒号、一个空格和当前 errno 值的文本表示形式。

strerror()函数,返回一个指针,指针指向当前 errno 值的文本表示形式。

让我们来模拟一种错误情况,尝试打开一个不存在的文件。您可以使用多种方式来输出错误消息,在这里我们使用函数来演示用法。另外有一点需要注意,您应该使用stderr文件流来输出所有的错误。

#include 
#include 
#include 

extern int errno ;

int main ()
{
  FILE * pf;
  int errnum;
  pf = fopen ("unexist.txt", "rb");
  if (pf == NULL)
  {
   errnum = errno;
   fprintf(stderr, "错误号: %d
", errno);
   perror("通过 perror 输出错误");
   fprintf(stderr, "打开文件错误: %s
", strerror( errnum ));
  }
  else
  {
   fclose (pf);
  }
 
  return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:

错误号: 2
通过 perror 输出错误: No such file or directory
打开文件错误: No such file or directory

被零除的错误

在进行除法运算时,如果不检查除数是否为零,则会导致一个运行时错误。

为了避免这种情况发生,下面的代码在进行除法运算前会先检查除数是否为零:

#include 
#include 

main()
{
  int dividend = 20;
  int divisor = 0;
  int quotient;
 
  if( divisor == 0){
   fprintf(stderr, "除数为 0 退出运行...
");
   exit(-1);
  }
  quotient = dividend / divisor;
  fprintf(stderr, "quotient 变量的值为 : %d
", quotient );

  exit(0);
}

当上面的代码被编译和执行时,它会产生下列结果:

除数为 0 退出运行...

程序退出状态

通常情况下,程序成功执行完一个操作正常退出的时候会带有值 EXIT_SUCCESS。在这里,EXIT_SUCCESS 是宏,它被定义为 0。

如果程序中存在一种错误情况,当您退出程序时,会带有状态值 EXIT_FAILURE,被定义为 -1。所以,上面的程序可以写成:

#include 
#include 

main()
{
  int dividend = 20;
  int divisor = 5;
  int quotient;
 
  if( divisor == 0){
   fprintf(stderr, "除数为 0 退出运行...
");
   exit(EXIT_FAILURE);
  }
  quotient = dividend / divisor;
  fprintf(stderr, "quotient 变量的值为: %d
", quotient );

  exit(EXIT_SUCCESS);
}

当上面的代码被编译和执行时,它会产生下列结果:

quotient 变量的值为 : 4



审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7604

    浏览量

    136614
  • 编程语言
    +关注

    关注

    10

    文章

    1942

    浏览量

    34694
  • 函数调用
    +关注

    关注

    0

    文章

    19

    浏览量

    2585

原文标题:C语言中的错误处理机制

文章出处:【微信号:单片机与嵌入式,微信公众号:单片机与嵌入式】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    嵌入式编程错误处理机制设计

    本文主要总结嵌入式系统C语言编程中,主要的错误处理方式。文中涉及的代码运行环境如下。
    发表于 04-28 09:59 761次阅读
    嵌入式编程<b class='flag-5'>错误处理机制</b>设计

    嵌入式系统C语言编程中主要的错误处理方式

    本文主要总结嵌入式系统C语言编程中,主要的错误处理方式。
    发表于 07-24 16:40 915次阅读
    嵌入式系统<b class='flag-5'>C</b><b class='flag-5'>语言</b>编程中主要的<b class='flag-5'>错误处理</b>方式

    Rust语言中错误处理机制

    可能的错误,实际运行中仍然可能出现各种各样的错误,比如文件不存在、网络连接失败等等。对于这些不可预测的错误,我们必须使用错误处理机制来进行处理
    的头像 发表于 09-19 14:54 1401次阅读

    嵌入式C编程常用的异常错误处理

    (Exception Handling) 虽然C语言本身不支持异常处理,但可以通过结构化的错误处理机制来模拟异常处理。 6. 日
    发表于 08-06 14:32

    labviEW错误处理的问题

    为什么这个程序在启用自动错误处理C:\data.txt不存在的情况下,没有显示错误对话框啊?
    发表于 04-01 10:03

    INtime RTOS内部的关键处理机制是什么

    INtime RTOS内部的关键处理机制是什么?INtime RTOS内部的关键处理机制有哪些相关的应用案例?
    发表于 09-29 06:28

    C语言和汇编语言混合编程方法和C语言中处理方法

    C语言和汇编语言混合编程方法和C语言中处理方法,new
    发表于 01-06 14:36 36次下载

    LabVIEW中的错误处理

    如何合理使用 LabVIEW 中的自定义错误处理功能;对于可预见的错误,是否可以选择直 接忽略,或者前几次尝试忽略直到该特定错误出现很多次后才通知用户需要纠正该错误 了;是否可以对
    发表于 05-24 11:07 6次下载

    C语言教程之C语言中级培训教程—预处理电子课件免费下载

    本文档的主要内容详细介绍的是C语言教程之C语言中级培训教程—预处理电子课件免费下载
    发表于 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>级培训教程—预<b class='flag-5'>处理</b>电子课件免费下载

    嵌入式系统C语言编程中的错误处理资料总结

    本文主要总结嵌入式系统C语言编程中,主要的错误处理方式。文中涉及的代码运行环境如下:
    发表于 11-28 10:39 1922次阅读

    C++程序异常处理机制是什么

    那么C++设计了一套异常处理机制,一方面能够使得异常处理和正常运行代码进行分离,使得程序更加模块化;另一方面,C++的异常处理可以不需要异常
    的头像 发表于 02-21 10:37 855次阅读
    <b class='flag-5'>C</b>++程序异常<b class='flag-5'>处理机制</b>是什么

    C++异常机制解析

    传统排错 我们早在 C 程序里面传统的错误处理手段有: 终止程序,如 assert;缺陷是用户难以接受,说白了就是一种及其粗暴的手法,比如发生内存错误,除0错误时就会终止程序。 返回
    的头像 发表于 11-09 14:16 414次阅读
    <b class='flag-5'>C</b>++异常<b class='flag-5'>机制</b><b class='flag-5'>解析</b>

    西门子博图:错误处理机制概览

    可通过以下几种不同的错误处理机制进行参数跟踪或编程或访问错误
    的头像 发表于 11-25 11:35 2793次阅读
    西门子博图:<b class='flag-5'>错误处理机制</b>概览

    介绍C语言中错误处理和异常处理的一些常用的方法和策略

    C语言是一种低级的、静态的、结构化的编程语言,它没有提供像C++或Java等高级语言中的异常处理机制
    的头像 发表于 02-28 14:25 612次阅读

    socket编程中的错误处理技巧

    Socket编程是网络编程的基础,它允许程序之间通过TCP/IP协议进行通信。然而,网络通信是不稳定的,可能会遇到各种问题,如网络延迟、连接中断、数据丢失等。 错误处理的重要性 提高程序的健壮性
    的头像 发表于 11-01 17:47 840次阅读