为什么我没有得到

为什么我没有得到

本文介绍了为什么我没有得到“使用未初始化的”在这个微不足道的例子中,来自gcc的警告?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在。



所以我打算重复请使用 - Wall flags评论,但是当我测试代码与警告时,我发现没有警告报告给我很大的惊喜。

所以我修剪它(这段代码对于执行的目的没有任何意义,但它说明了我想展示的内容):

  #include< ; stdio.h中> 

int main()
{

int i,len = 12;

/ * printf(%d \ n,i); * /

while(i!= len-1)
{

i ++;
len--;
}

返回0;
}

使用 gcc 4.7.3和6.2.1使用

  gcc -Wall -Wextra -pedantic 

我没有得到任何警告,而 i 在使用<$ $之前没有初始化c $ c> while 循环。



现在,如果我取消注释 printf get:

 警告:'i'在此函数中未初始化使用[-Wuninitialized] 

那么为什么当传递 i printf时发出警告但不在中,而测试?



(它不同于,因为在我的情况下,没有分支)



(听起来像一个bug,但它太微不足道了,我不知道如果我没有遗漏一些巨大的东西)。

解决方案

很难说它是一个 bug ,因为 gcc 将优化和创建警告的代码混合在一起,甚至为这个警告提供了警告:

(from GCC docs Options to Request or Suppress Warnings, emphasis mine)

You found an IMHO very silly case here. Try -O1 and you'll get an unexpected warning:

warn.c: In function ‘main’:
warn.c:13:6: warning: ‘i’ may be used uninitialized in this function [-Wmaybe-uninitialized]
     i++;
      ^

So, gcc still misses the first uninitialized use, but finds the second one! Try -O0 or -O2 and the warning is again gone...

You could still try to file a bug about this. Note clang gets it right:

warn.c:10:9: warning: variable 'i' is uninitialized when used here
      [-Wuninitialized]
  while(i!=len-1)
        ^
warn.c:6:8: note: initialize the variable 'i' to silence this warning
  int i,len=12;
       ^
        = 0
1 warning generated.

这篇关于为什么我没有得到“使用未初始化的”在这个微不足道的例子中,来自gcc的警告?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-22 21:48