为什么GCC中的-Wunused-variable即使在静态const上也会产生错误?



我有一个标题,core/types.hh,由几个不同的构建目标使用。它有以下声明:

core/types.hh

typedef std::size_t  Size;
static const Size SZ_MAX = std::numeric_limits<Size>::max();
...

有些目标使用这个常数,有些不使用。所以我得到:

error: 'core::SZ_MAX' defined but not used"

我在Linux上使用GCC 4.7.3的scons。我设置了-Wall,并希望保持这种状态。

根据我对GCC文档的理解,这应该不会给出警告:

-Wunused-variable

当局部变量或非常量静态变量在声明之外未被使用时发出警告。此警告由-Wall.

启用

所以我不明白为什么我得到一个警告(它变成了一个错误)。

在其他答案中,人们被建议声明extern,并在使用该常数的文件中进行赋值。该文件被许多其他文件使用,因此如果我这样做,它将失去其恒定性。此外,这个文件有头保护,所以我认为这应该意味着这个常量实际上只创建一次。

我很感激任何帮助!


可能的重复:

  • 如何使用"未使用的变量"警告类型常量?
  • 在h文件中声明的c++静态数组给出警告'已定义但未使用'

似乎这是不是停止编译的错误。

相反,如果GCC发现另一个错误,它仍然会报告这个。

我实际上有另一个未使用的变量,这就是导致这个错误的原因。

例如,创建以下文件:

file1.cc

#include "head1.hh"
int main() {
    int bad_unused_variable;
    return my_ns::JUST_ANOTHER_CONST;
}

head1.hh

#ifndef HEAD1
#define HEAD1
#include <stdint.h>
#include <cstddef>
#include <limits>
namespace my_ns {
    typedef std::size_t Size;
    static const Size SZ_MAX = std::numeric_limits<Size>::max();
    static const Size JUST_ANOTHER_CONST = 8;
}
#endif

:

> g++ -Wall -Werror file1.cc -O2 -std=c++98 -o file1
file1.cc: In function 'int main()':
file1.cc:4:6: error: unused variable 'bad_unused_variable' [-Werror=unused-variable]
In file included from file1.cc:1:0:
head1.hh: At global scope:
head1.hh:10:20: error: 'my_ns::SZ_MAX' defined but not used [-Werror=unused-variable]
cc1plus: all warnings being treated as errors

编辑这似乎也已经在这里得到了回答:gcc警告:定义但未使用的变量与未使用的变量-在那里他们提到了两个警告消息(unused variable vs defined but not used)之间的细微差异。尽管如此,它并没有真正回答为什么 GCC会这样做…

最新更新