今天来分享我认为比较好的几种在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. 大数据实时计算工程师/Hadoop工程师/数据分析师职业路线图

    http://edu.51cto.com/roadmap/view/id-29.html http://my.oschina.net/infiniteSpace/blog/308401 大数据实时计算 ...

  2. iso、ios、osi的区别

    ISO  国际标准化组织(International Organization for Standardization)简称ISO,是一个全球性的非政府组织,是国际标准化领域中一个十分重要的组织.IS ...

  3. 乘风破浪:LeetCode真题_017_Letter Combinations of a Phone Number

    乘风破浪:LeetCode真题_017_Letter Combinations of a Phone Number 一.前言 如何让两个或者多个集合中的随机挑选的元素结合到一起,并且得到所有的可能呢? ...

  4. plsql连接12cR2 PDB报错ORA-28040/ORA-01017

    http://hbxztc.blog.51cto.com/1587495/1907533 PS: 在数据库服务器上的oracle/network/admin/sqlnet.ora文件添加一行SQLNE ...

  5. codeforces 414D Mashmokh and Water Tanks

    codeforces 414D Mashmokh and Water Tanks 题意 题解 \(a_i\):第 \(i\) 层的结点个数. \(b_i\):第 \(i\) 层初始有水的结点个数. 如 ...

  6. PHP笔记09:PHP之 MVC理解

    1. 首先通俗地说说我对MVC的理解: Model是负责干活的,它干的活主要是从数据库中获取需要的数据以及对获取的数据按照业务逻辑进行加工处理,至于为什么要干某件活,何时干某件活它一概不管,而这正是C ...

  7. Dockerfile.md

    Docker 使用 前提条件 Docker目前只能在64位CPU架构的计算机上运行(目前只能是x86_64 .amd64). Linux 3.8 或 更高版本的内核.3.8之前的版本也能运行,但效果不 ...

  8. c++ 一般虚函数

    类图: 代码: #include <iostream> using namespace std; class CFather //父类 { public: virtual void dis ...

  9. 【node.js】回调函数

    学习链接:http://www.runoob.com/nodejs/nodejs-callback.html Node.js 异步编程的直接体现就是回调. 异步编程依托于回调来实现,但不能说使用了回调 ...

  10. On Java 8中文版 英雄召集令

    这是该项目的GITHUB地址:https://github.com/LingCoder/OnJava8 广招天下英雄,为开源奉献!让我们一起来完成这本书的翻译吧! 如果您在阅读本书的过程中有发现不明白 ...