我有一个标题,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会这样做…