You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言bool类型返回值定义疑问:true/false与返回码冲突如何处理?

C语言函数返回值用true/false标记执行状态的建议

首先明确:绝对不要自定义true=0、false=1。C99标准的<stdbool.h>里已经明确true是1,false是0,强行反转会让其他读代码的人困惑,还可能和依赖标准bool定义的库代码冲突,完全得不偿失。

给你几个更合理的方案:

  • 遵循C的传统约定,用int返回状态
    直接返回0表示正常,非0(比如1)表示异常,这是C社区的通用习惯,所有人都能看懂:

    int do_something() {
        if (/* 执行正常 */) {
            return 0;
        } else {
            return 1; // 或其他非0值表示不同异常类型
        }
    }
    
  • 用标准bool类型,但调整状态逻辑
    如果一定要用bool,那就把“执行成功”对应true(1),“执行失败”对应false(0),贴合标准定义,逻辑也通顺:

    #include <stdbool.h>
    
    bool do_something() {
        if (/* 执行成功 */) {
            return true;
        } else {
            return false;
        }
    }
    

    调用的时候判断if (do_something())就表示成功,符合直觉。

  • 用枚举类型明确状态含义
    如果想让状态更具可读性,避免魔法数字,直接定义枚举:

    typedef enum {
        OP_OK = 0,    // 正常
        OP_ERROR = 1  // 异常
    } OpStatus;
    
    OpStatus do_something() {
        if (/* 执行正常 */) {
            return OP_OK;
        } else {
            return OP_ERROR;
        }
    }
    

    这种方式最清晰,后续还能扩展更多细分状态码,完全没有歧义。

总结:不要试图推翻标准的bool定义,要么按C的传统用int返回,要么调整逻辑适配标准bool,要么用枚举让状态更明确。

内容的提问来源于stack exchange,提问作者KabiLink

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 18:42:07