在为局部变量赋值之前使用未初始化的局部变量时,将报告此警告。 此用法可能会导致不可预知的结果。 在使用变量之前,始终应初始化变量。
代码分析名称:
USING_UNINIT_VAR
以下代码生成此警告,因为
i
变量仅在 为 true 时才
b
初始化:
int f( bool b )
int i;
if ( b )
i = 0;
return i; // i is uninitialized if b is false
若要更正此警告,请初始化该变量,如以下代码所示:
int f( bool b )
int i = -1;
if ( b )
i = 0;
return i;
以下示例显示,通过引用将变量传递给函数会导致编译器假定它已初始化:
void init( int& i );
int f( bool b )
int i;
init(i);
if ( b )
i = 0;
return i; // i is assumed to be initialized because it's passed by reference to init()
这支持将指向变量的指针传递到初始化函数的模式。
这种启发式可能会导致误报,因为许多函数需要指向初始化数据的指针。 使用 SAL 注释(如 _In_
和 _Out_
)描述函数的行为。 以下示例调用一个函数,该函数需要初始化其参数,因此会生成警告:
void use( _In_ int& i );
int f( bool b )
int i;
use(i); // uninitialized variable warning because of the _In_ annotation on use()
if ( b )
i = 0;
return i;
编译器警告(等级 1 和等级 4)C4700