C6246

警告 C6246:<variable> 的局部声明遮蔽了外部作用域中具同名的声明。 附加信息: 请参见此前位于 <location> 的声明。

此警告意味着在局部范围内有两个同名的声明。 外部范围的名称被内部范围的声明所隐藏。 如果打算使用外部范围的声明,将导致使用局部声明。

示例

下面的代码生成此警告:

#include <stdlib.h>
#define UPPER_LIMIT 256
int DoSomething( );

int f( )
{
  int i = DoSomething( );
  if (i > UPPER_LIMIT)
  {
    int i;
    i = rand( );
  }
  return i;
}

若要更正此警告,请使用另一个变量名,如下面的代码所示:

#include <stdlib.h>
#define UPPER_LIMIT 256
int DoSomething( );

int f ( )
{
  int i = DoSomething( );
  if (i > UPPER_LIMIT)
  {
    int j = rand( );
    return j;
  }
  else
  {
    return i;
  }
}

此警告仅识别范围重叠。