2012-07-16 77 views
1

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

一样,

//function declaration without argument 
fun1(); 

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

main() { 
    fun1(); 
    } 

上面的声明和调用看起来相同的地方定义部分是从申报和呼叫有点不同。

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

解析如何有效地执行?在上述情况下需要多少分析?

+0

我不是C++大师,但不要函数声明和定义表示返回值类型? – Adi 2012-07-16 09:33:37

+2

@Adnan除非你认为'implicit int'没错。 @Sachin解析C++非常困难。我建议使用'libclang'来为你做解析,并用它做你的静态分析,而不是自己去做。这对模板来说非常困难。 – pmr 2012-07-16 09:35:00

+0

谢谢@pmr,我应该更多地参与C++。 – Adi 2012-07-16 09:35:56

回答

3

这是你如何区分它们:

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

注意函数定义有函数名前“返回类型”。

另外,请注意函数声明看起来和它的定义完全一样。除非您看到;{,否则实际上并不需要区分它们。这就是您决定是否声明或定义的关键。在您的特定应用程序中,您并不关心它,因为您不关心该功能的实际功能。

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

更糟糕的是,有些函数可能不一定直接调用,而是通过虚函数调用。所以你对代码的静态分析只会显示父母的功能被调用,而实际上这是孩子的功能。

+0

这让我想起了巨蟒:“鸭子有什么区别?”尽管如此,你是否认为函数声明没有返回类型呢? – 2012-07-16 09:37:33

+0

我在说什么? – Shahbaz 2012-07-16 09:38:19

+0

啊,我明白你的意思了!更新了我的答案。 – Shahbaz 2012-07-16 09:38:31