今天来分享我认为比较好的几种在C语言下的错误处理方式

方式一:

int example(int num)
{
if(num < )
{
return ;
}
return ;
}

在不符合条件的情况下使用return终止程序

方式二:

void example()
{if(!dosomething())
{
   goto _End;
}
  if(!dosomething())
  {
    goto _End;
  } _End:
{
//dosomething
}
}

例子中的两个goto _End;语句的内容在你的程序中可能是一样的,那么使用goto就使得程序变得好维护了。举个例子:有资源申请就需要释放,如果在if判断前你用到了malloc或其他的申请资源空间(假设在此程序调用完毕后不会再用到), 那么势必要释放,不释放的话会造成内存泄露,那么问题来了,如果你这段代码中有很多的if判断条件,那岂不是需要写很多的资源释放?不是不可以,不过代码没有那么好看而且也不好维护,也难保你不会漏掉某一个if判断条件下的问题处理。所以用goto将相同的代码放在最后是比较好的一种方式。如果我文字描述无法让你理解请比较下面两个代码也可以联系我。

void example()
{
char *p1 = NULL, p2 = NULL;
p1 = (char *)malloc(sizeof(char));
if(!p1)
{
return ;
} p2 = (char *)malloc(sizeof(char));
if(!p2)
{
    free(p1);
    p1 = NULL;
    return ;
}
  if(!dosomething())
  {
    free(p1);
    free(p2);
    p1 = NULL;
    p2 = NULL;
    return ;
  }
}
void example()
{
char *p1 = NULL, p2 = NULL;
p1 = (char *)malloc(sizeof(char));
if(!p1)
{
return ;
} p2 = (char *)malloc(sizeof(char));
if(!p2)
{
  goto _End;
}
  if(!dosomething())
  {
    goto _End;
  } _End:
{
if(p1)
  {
      free(p1)
      p1 = NULL;
    }
    if(p2)
    {
      free(p2)
      p2 = NULL;
    }
  }
}

C语言下的错误处理问题的更多相关文章

  1. C语言下的错误处理的问题

    下面是三种C语言的错误处理,你喜欢哪一种?还是都不喜欢? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 /* 问题: 不充分,而且很容易出错,前 ...

  2. Go语言项目的错误和异常管理 via 达达

    Go语言项目的错误和异常管理 最近连续遇到朋友问我项目里错误和异常管理的事情,之前也多次跟团队强调过错误和异常管理的一些概念,所以趁今天有动力就赶紧写一篇Go语言项目错误和异常管理的经验分享. 首先我 ...

  3. 【转】Swift 语言的设计错误

    Swift 语言的设计错误 在『编程的智慧』一文中,我分析和肯定了 Swift 语言的 optional type 设计,但这并不等于 Swift 语言的整体设计是完美没有问题的.其实 Swift 1 ...

  4. 转:Linux环境下段错误的产生原因及调试方法小结

    源地址:http://www.cnblogs.com/panfeng412/archive/2011/11/06/2237857.html 补充:http://baike.baidu.com/link ...

  5. C语言代码区错误以及编译过程

    C语言代码区错误 欲想了解C语言代码段会有如何错误,我们必须首先了解编译器是如何把C语言文本信息编译成为可以执行的机器码的. 背景介绍 测试使用的C语言代码 导入标准库,定义宏变量,定义结构体,重命名 ...

  6. 沉浸式状态栏_boolean hasTopLine = a.getBoolean(1, false);//AS会在"1"下显示错误红线

    TypedArray a = mContext.obtainStyledAttributes(attrs); boolean hasBottomLine = a.getBoolean(0, false ...

  7. c语言下多线程

    原文:c语言下多线程 [问题]创建了10个线程,10个线程公用一个线程体,创建如下: int t1=0,t2=1,t3=2,t4=3,t5=4,t6=5,t7=6,t8=7,t9=8,t10=9; i ...

  8. IIS下自定义错误页面配置的两种方式(亲测可行)--IIS服务器

    网站自定义错误页面的设置,大家应该都知道它的重要性……不多说,下面带大家一步步在IIS下设置网站自定义错误页面…… 1.首先进入你的网站主页,找到[错误页](注意是IIS下的错误页不是.NET错误页) ...

  9. linux i2c 的通信函数i2c_transfer在什么情况下出现错误

    问题: linux i2c 的通信函数i2c_transfer在什么情况下出现错误描述: linux i2c设备驱动 本人在写i2c设备驱动的时候使用i2c transfer函数进行通信的时候无法进行 ...

随机推荐

  1. [翻译] HTKDynamicResizingCell

    HTKDynamicResizingCell https://github.com/henrytkirk/HTKDynamicResizingCell Subclassed UITableView/U ...

  2. 执行系统命令,subprocess使用说明

    os.system('ls -l') #只执行命令,不能将结果赋予变量 os.system('mkdir test')  #创建test目录 files = os.popen('ls -l').rea ...

  3. 延期年金(deferred annuity)

    含义:推迟m个时期后才开始付款的年金. 延期年金现值为 二.永续年金(Perpetuity) 永续年金:无限期支付下去的年金. 为期末付永续年金(perpetuity-immediate)的现值 表示 ...

  4. C#网络编程(一)基础篇

    简介: C#网络编程API包含在System.Net和System.Net.Sockets命名空间下,大部分网络操作都可以在其中找到相应的类来实现:包括Socket的创建和连接,网络流收发方法的封装, ...

  5. [BZOJ 2322][BeiJing2011]梦想封印

    梦想封印 题意 原题面: Problem 2322. -- [BeiJing2011]梦想封印 2322: [BeiJing2011]梦想封印 Time Limit: 20 Sec  Memory L ...

  6. [DBSDFZOJ 多校联训] Password

    Password password.in/.out 描述 你来到了一个庙前,庙牌上有一个仅包含小写字母的字符串 s. 传说打开庙门的密码是这个字符串的一个子串 t,并且 t 既是 s 的前缀又是 s ...

  7. 【Alpha】总结 - (待更)

    Alpha总结 1. 个人总结 PM & BackEnd - 胡武成 BackEnd - 吴松青 Web - 孙浩楷 Web - 练斐弘 App - 胡冰 App - 黄世辉 UI - 张旗 ...

  8. nfs 安装配置

    系统环境:centos 6.4 x86_64 minimal,记得是199个安装包. 两台机器(可以是虚拟机): 192.168.1.150--->a机器 192.168.1.11-----&g ...

  9. 【RabbitMQ】3、工作队列模式(work模式)

    上一篇博客的作为rabbitMQ的入门程序,也是简单队列模式,一个生产者,一个消费者,今天这篇博客介绍work模式,一个生产者,多个消费者,下面的例子模拟两个消费者的情况. 图示:         一 ...

  10. vim基础初步

    vim文本编辑器初步 一.跟vi编辑器的关系 可以说vim编辑器是vi编辑器的升级版,它保留了vi编辑器的所有东西,而且加入了自己的新的特性. 比如说:支持跨平台,支持语法高亮,支持多级撤销等. ++ ...