Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 列出头文件中声明但源文件中缺少的所有函数? 问题:_C_Header Files_Static Analysis - Fatal编程技术网

C 列出头文件中声明但源文件中缺少的所有函数? 问题:

C 列出头文件中声明但源文件中缺少的所有函数? 问题:,c,header-files,static-analysis,C,Header Files,Static Analysis,是否有一些linter/静态分析器对在头文件中声明但未在相应源文件中实现的函数发出警告/出错 假设我们有以下标题(省略了guard): 以及以下资料来源: /* example.c */ #require "example.h" int doSomething(int i) { return i + 1; } 那么有没有什么工具可以告诉我example.c中缺少doSomethingElse() 为什么要问? 在一个练习中,我们得到了一些具有完全扩展接口的HeaderFile,以及部分准

是否有一些linter/静态分析器对在头文件中声明但未在相应源文件中实现的函数发出警告/出错

假设我们有以下标题(省略了guard):

以及以下资料来源:

/* example.c */
#require "example.h"

int doSomething(int i) {
  return i + 1;
}
那么有没有什么工具可以告诉我
example.c
中缺少
doSomethingElse()

为什么要问? 在一个练习中,我们得到了一些具有完全扩展接口的HeaderFile,以及部分准备好的源文件,其中一些函数完全提供,一些函数部分提供,还有一些缺失

对于实际运行和编译这个程序来说,完成部分提供的函数就足够了,但是在头文件中定义的接口和源文件中现在提供的函数之间仍然存在一些差异


我可以手工检查所有的头/源代码对,并实现缺少的功能,但如果有一些自动生成的todolist,那就太好了。

我只需要使用
grep
等工具即可:

grep ');' foo.h | tr -d ';' | while read decl
do
    if ! grep -q "$decl" foo.c
    then
        echo "not found: $decl"
    fi
done

不,这并不完美,但如果您的用例像您所概述的那样简单,它可能会起作用。

除非您想检查许多函数,否则大多数集成开发环境(IDE)以及一些编码文本编辑器都有工具或插件,可以从声明中找到函数的定义。你可以使用它,看看编辑器是否能找到定义。如果你的标题包含另一个标题(例如:如果它使用时间),并且该标题定义了标准库中的一些函数,你该怎么办。@Jasen我对一些嵌套标题不感兴趣,只是对header和source中的函数进行了严格的比较。@JoachimPileborg可能在emacs的深处埋藏了这样一个功能,但遗憾的是我还没有找到它:(一般来说就是这么简单,但是你的方法似乎没有真正起作用。它列出了标题中提到的每一个函数,尽管它在源代码中实现了。在标题中,它将有
与原型在同一行,在
.c
中,它不会起作用。这就是
tr
药剂存在的原因:删除“;”@NobbZ:我在第一个grep中有一个反斜杠,我不应该删除,现在删除了。我用您的示例输入进行了测试,它对我有效。确保您像我一样删除了反斜杠,如果它仍然不起作用,则需要进行一些调试。:)我已经删除了它,因为我的
grep
不喜欢它;)我稍后会研究一下,并设法确定这一点。
grep ');' foo.h | tr -d ';' | while read decl
do
    if ! grep -q "$decl" foo.c
    then
        echo "not found: $decl"
    fi
done