Yuv*_*val 6 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();
...
Run Code Online (Sandbox Code Playgroud)
一些目标使用这个常数,有些则没有.所以我得到:
error: 'core::SZ_MAX' defined but not used"
Run Code Online (Sandbox Code Playgroud)
我在Linux上使用带有GCC 4.7.3的scons.我已经-Wall设定并希望保持这种状态.
据我从GCC文档中了解,这不应该发出警告:
-Wunused-variable除了声明之外,每当局部变量或非常量静态变量未使用时发出警告.此警告已启用
-Wall.
所以我不明白为什么我会收到警告(这会变成错误).
在其他答案中,建议人们进行声明extern并在使用常量的文件中进行赋值.许多其他文件都使用此文件,因此如果我这样做,它将失去其常量.此外,这个文件有标题保护,所以我认为这应该意味着常量实际上只创建一次.
我很感激任何帮助!
尤瓦
可能重复:
看来这不是停止编译的错误。
相反,如果 GCC 发现另一个错误,它仍然会报告此错误。
实际上我还有另一个未使用的变量,这就是导致此错误的原因。
例如,创建以下文件时:
file1.cc#include "head1.hh"
int main() {
int bad_unused_variable;
return my_ns::JUST_ANOTHER_CONST;
}
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
你得到:
> 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
Run Code Online (Sandbox Code Playgroud)
编辑
这似乎也在这里得到了回答:gcc warnings: Defined but notused vsunused variableunused variable - 他们在那里提到了两个警告消息( vs )之间的细微差别defined but not used。尽管如此,它并没有真正回答为什么GCC会这样做......
| 归档时间: |
|
| 查看次数: |
3390 次 |
| 最近记录: |