所以,让我说我粗心大意并犯了一个愚蠢的错字..这个档案:
test.c的
#include <stdio.h>
int main()
{
int x = x;
printf("%d\n",x);
}
Run Code Online (Sandbox Code Playgroud)
编译好:
mymachine:~ oll$ gcc test.c
mymachine:~ oll$ ./a.out
1782198366
Run Code Online (Sandbox Code Playgroud)
显然int x = x是一个错误,但编译器在没有警告的情况下接受了这个.我浪费了几个小时来尝试这个错误.
是否有一个编译器标志,并且可以用于gcc/g ++以使编译器在使用未初始化的堆栈变量时给出警告?这可能会为我节省很多时间.
我试过gcc -O -Wuninitialized test.c- 没用.
提前致谢
编辑:我试过了-Wall,没有提到x
mymachine:~ oll$ gcc -Wall test.c
test.c: In function ‘main’:
test.c:7: warning: control reaches end of non-void function
Run Code Online (Sandbox Code Playgroud)
编辑:找到解决方案
似乎使用命令行工具gcc并g++在OS X 10.8中没有提供此警告,使用clang工程:
mymachine:~ oll$ clang -Wall test.c
test.c:5:10: warning: variable 'x' is uninitialized when used within its own initialization [-Wuninitialized]
int x = x;
~ ^
1 warning generated.
Run Code Online (Sandbox Code Playgroud)
它看起来像你想要的警告标志-Wuninitialized -Winit-self(见它现场):
警告用自己初始化的未初始化变量.请注意,此选项只能与-Wuninitialized选项一起使用.
例如,GCC仅在指定-Winit-self时警告我在以下代码段中未初始化:
int f()
{
int i = i;
return i;
}
Run Code Online (Sandbox Code Playgroud)
此警告由-Wall在C++中启用.
根据以下评论,可能存在一些版本依赖性.请注意,clang这只是使用生成警告,这-Wall对我来说更合理:
warning: variable 'x' is uninitialized when used within its own initialization [-Wuninitialized]
int x = x;
~ ^
Run Code Online (Sandbox Code Playgroud)
我上面链接的实例还包括一个注释掉的clang命令行.
另请参阅为什么-Winit-self与-Wuninitialized分开.
| 归档时间: |
|
| 查看次数: |
422 次 |
| 最近记录: |