所以,让我说我粗心大意并犯了一个愚蠢的错字..这个档案:
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 …Run Code Online (Sandbox Code Playgroud) 为什么-ansi和-std = c ++ 11不能一起工作?(根据其他答案,ANSI恢复到C++ 98)我正在使用g ++ - 4.8.
这是ANSI批准的C++ 11:
http://webstore.ansi.org/RecordDetail.aspx?sku=INCITS%2fISO%2fIEC+14882-2012
这让我感到困惑.谢谢!