UNUSED.FUNC.WARN

潜在的未使用的函数定义

潜在的未使用的函数。

漏洞与风险

已定义但未使用的函数可能存在少量隐患。可能导致开发混淆,例如拥有与被调用的函数名称类似的函数。在极少数的情况下,未使用的函数可能还会找到其最终可执行文件(可能导致其他漏洞)的路径。如果函数被视为未使用的函数,则应将其从转换单元中移除。相反地,如果函数被认为是从其他转换单元调用的函数(非静态函数,例如自定义库函数),则其应在标头文件中具有声明。否则,该函数应被定义为静态函数并在当前转换单元的某些点处使用。

漏洞代码示例 1

复制
  File: lib.h
  void used();
  
  File: driver.c
  #include “lib.h”
  void used() {
  }
  void unused() { //A non-static function without any declaration in a header file
  }
  int main() {
    used();
    return 0;
  }

函数“unused()”未被调用也未在文件“lib.h”中具有声明。仍然可以通过“extern”声明从其他转换单元调用“unused()”(在此情况中,文件“lib.h”应包含对应的声明)。Klocwork 会在 driver.c 文件的第 5 行生成 UNUSED.FUNC.WARN

修正代码示例 1

复制
  File: lib.h
  void used();
  void unused();
  
  File: driver.c
  #include “lib.h”
  void used() {
  }
  void unused() { //A non-static function without any declaration in a header file
  }
  int main() {
    used();
    return 0;
  }

在上面的列表中,假设函数“unused()”可以从“driver.c”外部调用,从而将在“lib.h”文件中添加声明。

漏洞代码示例 2

复制
  void foo(int x) {}
  void foo(int x, int y) {}
  
  int main() {
    foo(0, 0);
    return 0;
  }

在上面的示例中,重载的“foo(int)”已定义但是从未在当前转换单元中使用。Klocwork 会在第 1 行生成 UNUSED.FUNC.WARN

修正代码示例 2

复制
  void foo(int x, int y) {}
  
  int main() {
    foo(0, 0);
    return 0;
  }

移除未使用的函数。

相关检查器