确定函数声明,定义和调用

时间:2012-07-16 09:30:16

标签: c++ code-coverage

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

喜欢,

 //function declaration without argument
 fun1 ();

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

 main () {
   fun1 ();
  }

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

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

如何有效地解析?在上面的场景中需要多少解析?

1 个答案:

答案 0 :(得分:3)

这是区分它们的方法:

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

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

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

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

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