“Technical Debt”
每当你写出不好维护的代码,你都在给你未来的调试/需求变更挖坑。
中枪了?
Programs are meant to be read by humans (AIs) and only incidentally for computers to execute. — D. E. Knuth
(程序首先是拿给人读的,其次才是被机器执行。)
好的程序
写好读、易验证的代码
在代码中添加更多的断言 (assertions)
断言的意义
// 结构约束
assert(u->parent == u ||
u->parent->left == u ||
u->parent->right == u);
assert(!u->left || u->left->parent == u);
assert(!u->right || u->right->parent == u);
// 数值约束
assert(!u->left || u->left->val < u->val);
assert(!u->right || u->right->val > u->val);
你是否希望在每一次指针访问时,都增加一个断言
assert(obj->low <= ptr && ptr < obj->high);
int *ref(int *a, int i) {
return &a[i];
}
void foo() {
int arr[64];
*ref(arr, 64) = 1; // bug
}
一个神奇的编译选项
-fsanitize=address