zoukankan      html  css  js  c++  java
  • 使用errno检测错误

    下面使用errno进行错误处理是错误的。

    /*调用库函数*/
    if (errno)
    	/*处理错误*/
    

    原因:

    上面代码的意图是,调用库函数失败,则会设置非零errno,从而进行错误处理;调用成功,则不进行错误处理。

    问题是,即使调用成功,也没有强制要求将errno设置为0,即虽然调用库函数成功,但是errno并不一定为0,可能是在调用库函数之前errno就被设置为非零值了。

    下面代码仍然是错误的。

    errno = 0;
    /*调用库函数*/
    if (errno)
    	/*处理错误*/
    
     
    原因:这段代码在调用库函数之前将errno设置为0,表面上看,如果调用库函数成功,则不会处理错误。
    问题在于,即使调用库函数成功,errno也可能被设置为非零值。如fopen创建一个文件,
    如果存在同名文件,则先删除再新建,不管成功创建与否,都可能会对是否存在同名文件设置errno的值。
     
     
     
    下面的代码是正确的。
     
    /*调用库函数*/
    if (返回的错误值)
    	检查 errno
    

    即我们只能根据返回的错误值来使用errno检测发生了何种错误,但不能依靠errno判断调用库函数是否发生了错误。
    一言以蔽之,不要用errno来判断是否发生了错误,而是用它来检测发生了何种错误。
  • 相关阅读:
    POJ1942-Paths on a Grid
    CodeForces 245C-Game with Coins
    codeforces 244B-Undoubtedly Lucky Numbers 搜索
    URAL
    HDU-1134 卡特兰数+java大数模板
    素数线性筛
    KMP讲解
    bzoj 3143: [Hnoi2013]游走
    bzoj 3238: [Ahoi2013]差异
    bzoj 2208: [Jsoi2010]连通数
  • 原文地址:https://www.cnblogs.com/helloweworld/p/2839701.html
Copyright © 2011-2022 走看看