Why does -Wunused-variable in GCC produce an error even on static const?
c, c++, compiler-warnings, constants, gcc
Solution
It seems that this was not the error that halted compilation.
Rather, if GCC find another error, it would still report on this too.
I actually had another unused variable, and that's what caused this error in the first place.
For example, when creating the following files:
`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
You get:
> 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
EDIT This also seems to have been answered here: gcc warnings: defined but not used vs unused variable - there they mention the subtle differences between the two warning messages (`unused variable` vs `defined but not used`). Still, it doesn't really answer as to why GCC behaves this way...
Problem
I have a header, `core/types.hh`, used by several different build targets. It has the following declaration: `core/types.hh` ``` typedef std::size_t Size; static const Size SZ_MAX = std::numeric_limits<Size>::max(); ... ``` Some of the targets use this constant, some don't. So I get: ``` error: 'core::SZ_MAX' defined but not used" ``` I use scons with GCC 4.7.3 on Linux. I have `-Wall` set and want to keep it that way. As far as I understand from the GCC documentation, this shouldn't give a warning: `-Wunused-variable` Warn whenever a local variable or non-constant static variable is unused aside from its declaration. This warning is enabled by `-Wall.` So I don't see why I get a warning (which turns into an error). On other answers, people were advised to make the declaration `extern` and to do the assignment in the file that uses the constant. This file is used by many other files, so it would loose its constant-ness if I do that. Furthermore, this file has header guards, so I think this should mean that the constant is actually created only once. I'd appreciate any help! Yuval Possible duplicates: - How to use typed constants with “unused variable” warnings? - c++ static array declared in h file gives warning 'defined but not used'