My version (5.4) of gcc warns about unused static
functions, even in a header file when -Wall
is used. It doesn't complain if the same functions are defined static inline
or simply inline
.
For example, the following function in a file unused.h
:
static void foo() {}
... when included in a test.cpp
file as follows:
#include "unused.h"
Generates the following compiler diagnostic when compiler with -Wall
:
In file included from test.cpp:11:0:
unused.h: At global scope:
unused.h:9:13: warning: ‘void foo()’ defined but not used [-Wunused-function]
static void foo() {}
^
It is common practice, as far as I know, to include headers with many utility functions, only a handful of which might be used in any given source file. This behavior means that I get warnings for any functions I don't use which are declared only static
.
As a practical matter I can simply change these to static inline
to get rid of the warning (or turn off the specific warning entirely, but I do find it useful from time to time), but it seems that large utility functions which won't benefit from inlining1 are more logically declared static
2.
As far as I know unused static
functions (just like static inline
) are simply dropped by gcc when the translation unit is compiled, so they pose no binary size or link-time overhead at all.
Am I missing something here? Is there a good reason that unused static
functions are more problematic than static inline
?
1 Yes, I'm aware it's a hint only but gcc actually takes the hint in many cases.
2 Or perhaps better, only declared in the header file and defined somewhere else in a .cpp
file - but that inhibits header-only use which is sometimes convenient.