使用errno检测错误

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

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

 

原因:

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

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

 

 

 

下面代码仍然是错误的。

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

即我们只能根据返回的错误值来使用errno检测发生了何种错误,但不能依靠errno判断调用库函数是否 发生了错误。
一言以蔽之,不要用errno来判断是否发生了错误,而是用它来检测发生了何种错误。

转载于:https://www.cnblogs.com/helloweworld/archive/2012/12/30/2839701.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值