问题描述
在。
所以我打算重复请使用 - Wall
flags评论,但是当我测试代码与警告时,我发现没有警告报告给我很大的惊喜。
#include< ; stdio.h中>
int main()
{
int i,len = 12;
/ * printf(%d \ n,i); * /
while(i!= len-1)
{
i ++;
len--;
}
返回0;
}
使用 gcc $ c $编译时c> 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的警告?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!