一个简单的程序:
int main()
{
long i = i;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译为C不会出现错误,也不会出现警告.
$ gcc -Wall -Wextra -pedantic 1.c
Run Code Online (Sandbox Code Playgroud)
编译为C++会发出警告:
$ c++ -Wall -Wextra -pedantic 1.c
1.c: In function ‘int main()’:
1.c:3:7: warning: ‘i’ is used uninitialized in this function [-Wuninitialized]
long i = i;
Run Code Online (Sandbox Code Playgroud)
在两种情况下,变量i似乎都是0,尽管在c ++中它可能是未初始化的.我实际上在我的一个功能中犯了这样的错字,很难找到它.我该怎么做才能避免这种情况?我希望至少有一个警告.此外,Clang在任何一种情况下都不会给出任何警告(c或c ++).是否有标准的特定部分说明了这种行为?
编辑:尝试了类似的东西:
$ cat 1.c
int main(void)
{
int k = k + 0;
int i = i + 1;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
警告(在C中)仅针对"i"生成.
$ gcc -Wall -Wextra 1.c
1.c: In function ‘main’:
1.c:4:6: …Run Code Online (Sandbox Code Playgroud)