我有一个标题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
并在使用常量的文件中进行分配。许多其他文件都使用此文件,因此如果我这样做,它将失去其常量。此外,这个文件有标题保护,所以我认为这应该意味着常量实际上只创建了一次。
我很感激任何帮助!
尤瓦
可能重复:
答案 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的行为方式......