把「崩在哪一层」自己打出来
(本条路线统一用 gcc -std=c11 -O0 -Wall 编译)⚠️ 判题机上跑不了 gdb,所以这一节练的是**同一件事的另一半**:**把 gdb 会告诉你的东西,自己在程序里打出来。**会读会打,换到有 gdb 的地方一样用。
#include <stdio.h>
/* gdb 的 backtrace 告诉你"崩在哪一层"。没有 gdb 的时候,
在每一层进出的地方留一个记号,效果是一样的 */
static int depth = 0, deepest = 0;
static void enter(void) { depth++; if (depth > deepest) deepest = depth; }
static void leave(void) { depth--; }
static int inner(int x) { enter(); int r = x * 2; leave(); return r; }
static int middle(int x) { enter(); int r = inner(x) + 1; leave(); return r; }
static int outer(int x) { enter(); int r = middle(x) * 3; leave(); return r; }
int main(void) {
int v = outer(2);
printf("%d/%d/%d\n", v, deepest, depth);
return 0;
}
全部评论