C プログラムを長い間デバッグしたところ、関数呼び出しを行うときに引数を見逃していたことがわかりました。このような愚かな間違いは本当にイライラしますが、コンパイラはこれを検出できるはずだと思います. (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
}
私が行ったもう 1 つの発見は、プロトタイプに引数が含まれている場合、コンパイラが報告することです。しかし、プロトタイプにはたまたま引数が含まれていなかったため、コンパイラはスリップしました。