errno的陷阱

本文探讨了在程序开发中使用errno进行错误处理的常见误区,并提供了正确使用方法,强调了errno的作用和使用场景,帮助开发者避免常见的陷阱。

看看这段代码,有问题吗?

func();

if (0 != errno) {

    printf("something wrong!\n");

}

我们在调用某些系统函数的时候,经常会通过errno来判断是否出错,上面的写法对吗?

错!!!

因为errno只有在调用失败的时候才会被修改,调用成功的时候不会被修改;

当errno==0的时候,我们不能确定调用成功,也有可能是前面代码把errno设置成了0;

当errno<0的时候,我们不能确定调用失败,也有可能是上次调用失败遗留下来的结果;

所以,正确的做法是

1)如果函数本身返回一个指示调用成功与否的值,则先用这个值判断失败,如果确定失败,再根据errno判断失败类型

res = func();

if(res==某个失败值) {

    printf("errno=%d\n", errno);

}

2) 调用函数前先手动设置errno=0

errno = 0;

func();

这个时候errno就能说明问题了

if( 0 == errno )

    printf("succeed");

else

    printf("failed");


总之,记住一句话:errno是在已经知道出错了的情况下,表示出错类型的;最好不要拿它来作为判断是否出错的依据;

顺便,引用一篇文章http://hi.baidu.com/tjuer/item/cc75ed144e3197011894ec8f

转载于:https://my.oschina.net/mayqlzu/blog/98508

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值