【发布时间】:2017-07-27 09:55:17
【问题描述】:
假设我们有这样的代码:
int check(){
int x = 5;
++x; /* line 1.*/
return 0;
}
int main(){
return check();
}
如果 line 1 被注释掉并且编译器在启用所有警告的情况下启动,它会发出:
warning: unused variable ‘x’ [-Wunused-variable]
但是,如果我们取消注释 line 1,即增加 x,则不会发出警告。
这是为什么呢?增加变量并没有真正使用它。
【问题讨论】:
-
这听起来更像是一个定义使用变量的含义。在我的世界中,语句中包含变量意味着我正在使用该变量。
-
试试
-O3.. -
被“使用”与“有用”无关:)
-
实际上,如果编译器真的知道某个变量是否未被使用,那会很烦人。有时你需要一个看起来没有被使用的变量,一个常见的技巧是写
(void)x来隐藏警告。如果编译器将其识别为x未被使用,则无法消除警告 -
如果
x不是原始类型并且它的类型会重载operator ++的含义怎么办?
标签: c c++ c++ c gcc clang compiler-warnings