添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
发怒的洋葱  ·  This application ...·  1 月前    · 
个性的跑步机  ·  mysql 生成随机数 ...·  1 年前    · 
果断的凉茶  ·  html ...·  1 年前    · 

在为局部变量赋值之前使用未初始化的局部变量时,将报告此警告。 此用法可能会导致不可预知的结果。 在使用变量之前,始终应初始化变量。

代码分析名称: 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