我尝试使用g++(gcc版本4.8.2(Debian 4.8.2-1))编译以下代码,并带有-Wall
标志(添加-Wextra
标志对我来说没有任何影响)。
#include <iostream>
using namespace std ;
int main() {
int i ;
cout << i << endl ;
}
它发出了这个警告:
test.cpp: In function ‘int main()’:
test.cpp:7:13: warning: ‘i’ is used uninitialized in this function [-Wuninitialized]
cout << i << endl ;
但是以下代码没有产生任何警告:
#include <iostream>
using namespace std ;
int main() {
for(int i ; i < 10 ; i++) {
cout << i << endl ;
}
}
我进行了进一步的测试。
以下代码产生警告:
#include <iostream>
using namespace std ;
int main() {
int i ;
while(i<10) {
cout << i << endl ;
}
}
但是以下内容不行:
#include <iostream>
using namespace std ;
int main() {
int i ;
while(i<10) {
cout << i << endl ;
i++ ;
}
}
在上面的程序中,如果我将
while
替换为if
,那么就会出现警告。是否有解释?为什么编译器在某些情况下能够识别问题,而在其他情况下却不能,尽管它们看起来非常接近?
-Wall -Wextra
,会出现这样的警告信息:warning: 'i' may be used uninitialized in this function [-Wmaybe-uninitialized] for(int i ; i < 10 ; i++) {
。 - vsoftco-Wall
参数,就可以为我完成这个任务(http://coliru.stacked-crooked.com/a/58bc57b1ce9b4ed0)。请说明您的编译器版本,因为GCC已经有很多很多版本了。或者直接升级。 - Lightness Races in OrbitWextra
标志对我来说没有任何改变。 - Tom Cornebize