如何让GCC报告一个未声明的符号?

时间:2012-02-03 09:47:16

标签: c++ c gcc

当我重命名符号时,我通常无法手动重命名代码中的所有出现。

当GCC报告此错误时,它只会告诉“(每个未声明的符号仅报告一次)”。

我希望它报告所有出现的情况。有可能吗?

2 个答案:

答案 0 :(得分:1)

我的第一个问题是:为什么?当我更改符号的名称时,我会这样做 使用全局搜索和替换:在我的编辑器(vim)中:

:argdo %s/\<oldname\>/newname/g

(这会将oldname的所有实例更改为newname,在所有文件中 编辑器参数列表,但仅当oldname是完整的 符号;即someoldname将不会被更改。)

如果名称是全局的,那么我将使用shell从shell执行相同的操作 sed

for f in $(find root -name '*.hh' -o -name '*.cc')
do
    sed 's/\<oldname\>/newname/g' $f > tmp && mv tmp $x
done

如果你在Windows下,我相信VS有类似的可能性,有一个 全局搜索并替换解决方案中的所有源文件。

您不编译以查找您知道的错误;一般来说 更容易解决它们。

答案 1 :(得分:0)

你可以制作一个GCC插件或MELT扩展名。

您还可以修补GCC源代码。

但我真的不认为这是值得的(这可能需要你超过一天)。您也可以尝试一些替代编译器,例如LLVM/Clang

我的感觉是你应该重新编译并更正源代码,直到你没有警告(-Wall)或错误。它是实用的最简单,最简单的方法。


使用Emacs的实用建议

你可以配置,例如您的emacs编辑器可以通过单键按下进行编译(例如,将键盘的F11功能键绑定到recompile emacs操作,例如绑定F10功能键以跳到下一个错误,例如将其放入.emacs

 ; inside .emacs
 (global-set-key [f10] 'next-error)
 (global-set-key [f11] 'recompile)