UNREACH.RETURN

无法访问的 return 语句

UNREACH.RETURN 检查器会查找代码中无法访问的 return 语句(所有不能使用的 return)。UNREACH.RETURN 的一般用途是将无法访问的 return 与其他类型的无法访问的代码相分离。当您知道不重要的代码(特别是生成的代码)中存在无法访问的 return 语句,但仍想使用“UNREACH.GEN”检查更普遍的无法访问的代码时,关闭 UNREACH.RETURN 检查器将有所帮助。

漏洞与风险

无法访问的 return 语句会在代码维护和/或代码评审时引起混淆。在某些边界情况下,无法访问的 return 语句也会导致意外的程序行为。

漏洞代码示例

复制
  void foo(int *p)
  {
      switch (*p) {
          case 0
          case 1
              if (*p == 0) {
                  ++(*p);
                  return;
              } else if (*p == 1){
                 --(*p);
                 return;
             }
             return;
         default
             (*p) = 1 - (*p);
     }
 }

Klocwork 生成关于无法访问的 void return 语句的报告,指出无法访问第 13 行的 return 语句。显然,在这种情况下,该行为是良性的,一般会导致审阅者关闭该检查器(特别是当模式由代码生成器系统发出时)。

相关检查器

扩展

此检查器可进行扩展。有关详情,请参阅调整 C/C++ 分析。