C6244
警告 C6244:<variable> 的局部声明遮蔽了此前位于 <line> 行(<file> 中)的声明
此警告意味着某个声明与外部范围中的声明同名并隐藏了以前的声明。 您将无法从局部范围内引用以前的声明。 如果打算使用以前的声明,结果将使用局部声明。此警告仅识别范围重叠,而不识别生存期重叠。
示例
下面的代码生成此警告:
#include <stdlib.h>
#pragma warning(push)
// disable warning C4101: unreferenced local variable
#pragma warning(disable: 4101)
int i;
void f();
void (*pf)();
void test()
{
// Hide global int with local function pointer
void (*i)(); //Warning: 6244
// Hide global function pointer with an int
int pf; //Warning: 6244
}
#pragma warning(pop)
若要更正此警告,请使用下面的代码示例:
#include <stdlib.h>
#pragma warning(push)
// disable warning C4101: unreferenced local variable
#pragma warning(disable: 4101)
int g_i; // modified global variable name
void g_f(); // modified global function name
void (*f_pf)(); // modified global function pointer name
void test()
{
void (*i)();
int pf;
}
#pragma warning(pop)
在处理内存分配时,应检查代码,以确定分配的内存是否保留在一个变量中而由另一个变量来释放。