公司政策规定C源代码中的每个函数都有一个原型。我继承了一个带有自己的make系统的项目(所以我不能在gcc或Visual Studio上测试它),并发现其中一个文件有一些声明没有原型的静态函数。是否有一种方法(不一定是编译器)列出所有.c文件中没有原型的所有函数?
答案 0 :(得分:12)
gcc可以选择警告你:
gcc -Wmissing-prototypes
您可以将此警告转为错误以停止编译并强制用户修复它:
gcc -Werror=missing-prototypes
如果您只想列出它,可以使用gcc
选项-Wmissing-prototypes
进行编译,并在日志中使用grep 以前没有原型。
根据修改进行更新:
由于您现在提到不能使用gcc,因此您必须为当前编译器找到类似的选项。大多数编译器都有这样的选择。从手册页或内置帮助输出开始。
答案 1 :(得分:5)
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'