为什么gcc和clang都没有发出任何警告?

Nic*_*ick 5 c c++ gcc clang compiler-warnings

假设我们有这样的代码:

int check(){
    int x = 5;

    ++x; /* line 1.*/

    return 0;
}

int main(){
    return check();
}
Run Code Online (Sandbox Code Playgroud)

如果line 1已注释掉并且启动了编译器并启用了所有警告,则会发出:

warning: unused variable ‘x’ [-Wunused-variable]
Run Code Online (Sandbox Code Playgroud)

但是,如果我们取消评论line 1,即增加x,则不会发出警告.

这是为什么?增加变量并没有真正使用它.

对于,这都发生在GCC和Clang中.

Sou*_*osh 6

是.

x++x = x+1;与作业相同.当您分配某些内容时,您可能无法跳过使用它.结果不会被丢弃.

另外,从在线gcc手册,关于-Wunused-variable选项

除了声明之外,每当局部或静态变量未使用时发出警告.

因此,当您评论时x++;,它满足生成和发出警告消息的条件.当您取消注释时,编译器可以看到该用法(此特定"用法"的"有用性"值得怀疑,但是,它仍然是一种用法)并且没有警告.