🔴 不同的失败,不同的码
(本条路线统一用 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;
}
全部评论