我遇到了一个关于编写代码来确定C ++中未使用函数的问题。我们可以使用不同的数据结构来确定未使用的函数但在此之前,我们需要解析代码。我有与解析部分有关的问题,我们如何区分函数声明和定义以及函数调用?
喜欢,
//function declaration without argument
fun1 ();
//function definition
fun1 () {
// code goes here
}
main () {
fun1 ();
}
上面的声明和调用看起来相同,因为定义部分与声明和调用稍有不同。
除了上述场景之外,还有多种场景用于调用函数和函数作用域,比如两个具有相同名称的函数的类,一个函数在成员函数中被调用(即不需要显式调用对象)或使用对象调用函数,需要先了解对象的类型,以确定实际调用哪个函数。
如何有效地解析?在上面的场景中需要多少解析?
答案 0 :(得分:3)
这是区分它们的方法:
//function definition
return_type fun1 (args) {
// code goes here
}
请注意,函数定义在函数名称前面有一个“返回类型”。
另请注意,函数声明与其定义完全相同。在您看到;
或{
之前,您实际上不需要区分它们。这就是你决定是宣言还是定义的重点。在您的特定应用程序中,您并不真正关心它,因为您不关心函数实际执行的操作。
不幸的是,C ++很复杂。要确定哪些函数无用,您实际上至少需要一个基本的语义分析。这至少包括类型系统。
更糟糕的是,某些功能可能不一定直接调用,而是通过虚函数调用。因此,您对代码的静态分析仅显示父项的函数被调用,而实际上它是孩子的。