一个命令行工具的返回码该怎么定
工具跑完 return 的那个数,惯例是【0】。
失败之后,三个回执一起看
(本条路线统一用 gcc -std=c11 -O0 -Wall 编译)打开一个根本不存在的路径: #include <stdio.h> #include <errno.h> #include <string.h
🔴 不同的失败,不同的码
(本条路线统一用 gcc -std=c11 -O0 -Wall 编译)同一个函数,三种走法: #include <stdio.h> #include <stdlib.h> /* 真实工具的约定:0 表示成功,非 0
把失败的三个回执都读出来
(本条路线统一用 gcc -std=c11 -O0 -Wall 编译)三个数:失败了没、errno 变了没、是不是"文件不存在"。
⚠️ 按失败的原因给不同的码
(本条路线统一用 gcc -std=c11 -O0 -Wall 编译)三种情况要分出三个码。参数不对该比文件打不开更早被发现。
🔴 失败的路也要把东西收拾干净
(本条路线统一用 gcc -std=c11 -O0 -Wall 编译)三条路,两条是失败的。三个返回码都不变,只让最后那个差值变成 0。
gdb 里最先该敲的两条命令是什么
拿到一个会崩的程序,进 gdb 之后最先做的是【0】。
⚠️ 编译时不加 `-g` 会怎样
没加 -g 就直接调试,最直接的损失是【0】。
把「崩在哪一层」自己打出来
(本条路线统一用 gcc -std=c11 -O0 -Wall 编译)⚠️ 判题机上跑不了 gdb,所以这一节练的是**同一件事的另一半**:**把 gdb 会告诉你的东西,自己在程序里打出来。**会读会打,换到有 gdb 的地方一样用。
🔴 从哪一步开始不对的
(本条路线统一用 gcc -std=c11 -O0 -Wall 编译)把一段过程切成三步,每步都留个回执: #include <stdio.h> /* 定位 bug 的标准动作:把一段过程切成几步,每步留一个回执, 看是