小编not*_*ble的帖子

我怎样才能让gcc警告我"int i = i;"

一个简单的程序:

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)

c c++ gcc std compiler-warnings

27
推荐指数
1
解决办法
853
查看次数

标签 统计

c ×1

c++ ×1

compiler-warnings ×1

gcc ×1

std ×1