刚刚调试了一个C程序半天,才发现在进行函数调用的时候漏掉了一个参数,于是用junk代替了这个漏掉的参数。像这样的愚蠢错误确实令人沮丧,但我想编译器应该能够检测到这一点。(C 甚至不支持默认参数;即使在 C++ 中,也需要显式声明默认参数。)
更新:原型也被发现是错误的......
那么,是否有一个 GCC 标志来警告不匹配的函数调用参数号?我一直都有-Wall
;-pedantic
如此明显的错误未被发现是相当令人惊讶的。(其实我想GCC没有报告是有原因的,但我现在想不出任何原因。)
尴尬的代码示例:
static void dfs();
int main(int argc, const char *argv[]) {
dfs(1);
}
static void
dfs(int remain, int last) {
// dfs
}
我刚刚发现的另一个发现是,如果原型包含参数,编译器会报告;但是原型碰巧不包含任何参数,然后编译器就滑倒了。