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