CXX.ID_VIS.GLOBAL_VARIABLE.EXTERN

当全局变量仅由一个函数使用时,CXX.ID_VIS.GLOBAL_VARIABLE.EXTERN 检查器会报告缺陷。

漏洞与风险

定义可见性超出所需范围的变量会增加变量被意外使用的几率。

缓解与预防

尽可能将变量的范围或可见性限制到所需的所有引用的程度。例如,如果某个变量仅由一个函数使用,那么我们可以将该变量声明为局部变量。

漏洞代码示例

复制
  unsigned int a = 0;      // CXX.ID_VIS.GLOBAL_VARIABLE.EXTERN //
  void f0()
  {
      if (a++ > 10) return;
      /* … */
  }
  void f1()
  {
      /* … */
 }

在此示例中,变量“a”被声明为全局变量,但仅在函数 f0() 中使用。

修正代码示例

复制
  void f0()
  {
      static unsigned int a = 0; 
      if (a++ > 10) return;
      /* … */
  }
  void f1()
  {
      /* … */
 }

在修正代码示例中,我们在函数的范围内声明变量“a”。添加静态关键字可确保在每次调用 f0() 时都不会重置变量。

相关检查器