gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:40:39 30 4
gpt4 key购买 nike

我有一个 header ,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 上将 scons 与 GCC 4.7.3 结合使用。我设置了 -Wall 并希望保持这种状态。

据我了解 GCC documentation ,这不应该发出警告:

-Wunused-variable

Warn whenever a local variable or non-constant static variable is unused aside from its declaration. This warning is enabled by -Wall.

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

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

如果有任何帮助,我将不胜感激!

尤瓦尔


可能重复:

最佳答案

看来这不是停止编译的错误。

相反,如果 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 以这种方式运行...

关于c++ - 为什么 GCC 中的 -Wunused-variable 即使在静态常量上也会产生错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23931332/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com