1

我遇到了一个关于编写代码以确定 C++ 中未使用的函数的问题。我们可以使用不同的数据结构来确定未使用的函数。但在此之前,我们需要解析代码。我有与解析部分有关的问题,我们如何区分函数声明和定义以及函数调用?

像,

 //function declaration without argument
 fun1 ();

 //function definition
 fun1 () {
   // code goes here
  }

 main () {
   fun1 ();
  }

上面的声明和调用看起来相同,而定义部分与声明和调用略有不同。

除了上述场景,调用函数和函数作用域还有多种场景,比如两个具有同名函数的类,一个函数在成员函数中被调用(即不需要显式调用对象)或使用对象调用函数,所以需要了解首先确定对象的类型,以确定实际调用的是哪个函数。

解析如何高效实现?在上述情况下需要多少次解析?

4

1 回答 1

3

这是您可以区分它们的方法:

//function definition
return_type fun1 (args) {
  // code goes here
}

请注意,函数定义在函数名之前有一个“返回类型”。

另外,请注意函数声明看起来与其定义完全相同。;在看到或之前,您实际上不需要区分它们{。这就是您决定是声明还是定义的关键。在您的特定应用程序中,您并不真正关心它,因为您不关心函数实际执行的操作。

不幸的是,C++ 很复杂。要确定哪些函数是无用的,实际上至少需要进行基本的语义分析。这至少包括类型系统。

更糟糕的是,有些函数不一定是直接调用的,而是通过虚函数调用的。因此,您对代码的静态分析仅显示父函数被调用,而实际上它是子函数。

于 2012-07-16T09:34:51.230 回答