C语言返回值规范:错误码int与布尔值,哪种实践更优?
C语言函数返回值:用带错误码的int还是布尔值?
没有绝对的“最优方案”,核心看你的需求和代码风格的一致性,两种方式各有适用场景:
一、返回带错误码的int(0表示成功)
这是libc等类Unix系统库的惯例,优势很直接:
- 能返回具体错误类型,调用者可以根据不同的非0值判断是权限问题、资源不足还是参数错误,方便排查和针对性处理;
- 像
mkdir()、fopen()这类系统调用,失败时返回-1,同时通过errno传递更详细的错误码,本质就是这种思路的延伸。
如果你的函数需要让调用者知道“哪里错了”,这种方式更实用。
二、返回表示成功的布尔值(非0表示成功)
这是Windows API的常用风格,适合只关心“成没成”,不需要具体错误原因的场景:
- 调用时写法更直观,直接写
if (init_module())就能判断成功,不用额外写等于0或者取反的逻辑; - 如果后续需要错误信息,可以额外通过指针参数(比如
int *err_code)把错误码传出来,不影响主返回值的简洁性。
关键原则
- 一致性优先:如果项目依赖某个库(比如libc或Windows API),尽量跟着库的风格走,避免同一个项目里有的函数0成功、有的非0成功,徒增理解成本;
- 明确性要到位:不管选哪种,一定要在函数注释里写清楚返回值的含义,比如
// 返回0表示成功,非0为错误码:1=参数无效,2=资源不足,别让调用者猜。
内容的提问来源于stack exchange,提问作者Kian Walsh
相关产品推荐
相关产品推荐

