🔴 不同的失败,不同的码

👁️ 0 人浏览 💬 0 人评论 ❤️ 添加收藏

(本条路线统一用 gcc -std=c11 -O0 -Wall 编译)同一个函数,三种走法:

#include <stdio.h>
#include <stdlib.h>

/* 真实工具的约定:0 表示成功,非 0 表示失败,而且不同的失败给不同的码 */
#define OK        0
#define E_NOFILE  2
#define E_BADARG  3

static int work(const char *path, int arg_ok) {
    if (!arg_ok) return E_BADARG;
    FILE *f = fopen(path, "r");
    if (f == NULL) return E_NOFILE;
    fclose(f);
    return OK;
}

int main(void) {
    printf("%d/%d/%d\n",
           work("no_such_dir_xyz/none.txt", 1),   /* 文件打不开 */
           work("no_such_dir_xyz/none.txt", 0),   /* 参数就不对,更早失败 */
           work("/dev/null", 1));                 /* 一切正常 */
    return 0;
}
提交你的答案
请登录后提交答案。
去登录
代码编辑器
Ctrl + Enter 运行
本次输入:
输出:

                        
👩‍🏫
AI
💬 题目评论

全部评论