gcc警告:已定义但未使用vs未使用的变量

时间:2014-03-24 07:24:15

标签: gcc g++ compiler-warnings

每当我编译代码时,我都会注意到以下两个警告:

warning: '<variable>' defined but not used
warning: unused variable '<variable>'

我试图谷歌但我没有找到任何有用的帖子或博客,关于这两个警告之间有什么区别。

一些示例代码段的示例将为我做,或者如果我复制一些现有的线程,请随时参考。

1 个答案:

答案 0 :(得分:1)

我认为差异有点微妙,但这里是代码片段和编译器输出,它们展示了一些差异:

#include <iostream>

static const char * hello = "Hello";

void foo() {
    int i;
     std::cout << "foo" << std::endl;
}
...
argenet@Martell ~ % g++ /tmp/def_not_used.cpp -Wall
/tmp/def_not_used.cpp: In function ‘void foo()’:
/tmp/def_not_used.cpp:6:9: warning: unused variable ‘i’ [-Wunused-variable]
     int i;
         ^
/tmp/def_not_used.cpp: At global scope:
/tmp/def_not_used.cpp:3:21: warning: ‘hello’ defined but not used [-Wunused-variable]
 static const char * hello = "Hello";

所以这里从不使用局部变量,因此编译器可以在生成代码时简单地省略它,并且它会发出一个&#34;未使用的变量&#34;警告。

同时,静态C风格的文字不能轻易省略,因为它可用于更广泛的范围(整个.cpp文件)。 但是,它不会被此模块中的任何代码引用,因此编译器会对其进行警告,例如&#34;已定义但未使用&#34;。