使用errno检测错误
下面使用errno进行错误处理是错误的。
/*调用库函数*/ if (errno) /*处理错误*/
原因:
上面代码的意图是,调用库函数失败,则会设置非零errno,从而进行错误处理;调用成功,则不进行错误处理。
问题是,即使调用成功,也没有强制要求将errno设置为0,即虽然调用库函数成功,但是errno并不一定为0,可能是在调用库函数之前errno就被设置为非零值了。
下面代码仍然是错误的。
errno = 0; /*调用库函数*/ if (errno) /*处理错误*/
原因:这段代码在调用库函数之前将errno设置为0,表面上看,如果调用库函数成功,则不会处理错误。
问题在于,即使调用库函数成功,errno也可能被设置为非零值。如fopen创建一个文件,
如果存在同名文件,则先删除再新建,不管成功创建与否,都可能会对是否存在同名文件设置errno的值。
下面的代码是正确的。
/*调用库函数*/ if (返回的错误值) 检查 errno
即我们只能根据返回的错误值来使用errno检测发生了何种错误,但不能依靠errno判断调用库函数是否发生了错误。
一言以蔽之,不要用errno来判断是否发生了错误,而是用它来检测发生了何种错误。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步