如何在没有原型的情况下找到C函数?

公司政策规定C源代码中的每个函数都有一个原型。 我inheritance了一个带有自己的make系统的项目(所以我无法在gcc或Visual Studio上测试它)并发现其中一个文件有一些声明没有原型的静态函数。 是否有一种方法(不一定是编译器)列出所有.c文件中没有原型的所有函数?

gcc有一个选项来警告你:

 gcc -Wmissing-prototypes 

您可以将此警告转换为错误以停止编译并强制用户修复它:

 gcc -Werror=missing-prototypes 

如果你只想列出它,你可以使用gcc选项-Wmissing-prototypes和grep进行编译,因为日志中没有以前的原型

基于编辑更新

既然您现在提到不能使用gcc,那么您必须为当前的编译器找到类似的选项。 大多数编译器都有这样的选择。 从手册页或内置帮助输出开始。

ctags可以做到这一点!

--c-kinds=p生成所有函数原型的列表

--c-kinds=f生成所有函数定义的列表

现在你只需要比较那些。

diff -u <(ctags -R -x --sort=yes --c-kinds=f | cut -d' ' -f1) <(ctags -R -x --sort=yes --c-kinds=p | cut -d' ' -f1) | sed -n 's/^-//p'