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

时间:2014-05-29 10:34:52

标签: c++ c gcc const compiler-warnings

我有一个标题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 documentation,这不应该发出警告:

  -Wunused-variable      

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

启用

所以我不知道为什么会收到警告(这会变成错误)。

在其他答案中,建议人们发出声明extern并在使用常量的文件中进行分配。许多其他文件都使用此文件,因此如果我这样做,它将失去其常量。此外,这个文件有标题保护,所以我认为这应该意味着常量实际上只创建了一次。

我很感激任何帮助!

尤瓦


可能重复:

1 个答案:

答案 0 :(得分:3)

似乎停止编译的错误。

相反,如果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 warnings: defined but not used vs unused variable - 他们在那里提到了两条警告信息(unused variable vs defined but not used)之间的细微差别。不过,它并没有真正回答为什么 GCC的行为方式......