我的 gcc 版本(5.4)警告未使用的static
函数,即使在-Wall
使用时在头文件中也是如此。static inline
如果定义或简单地定义了相同的功能,它不会抱怨inline
。
例如,文件中的以下函数unused.h
:
static void foo() {}
...当包含在test.cpp
文件中时,如下所示:
#include "unused.h"
编译器使用 时生成以下编译器诊断-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() {}
^
据我所知,通常的做法是包含具有许多实用功能的标头,其中只有少数可能用于任何给定的源文件。这种行为意味着我会收到关于我不使用的任何仅声明的函数的警告static
。
作为一个实际问题,我可以简单地更改这些以static inline
消除警告(或完全关闭特定警告,但我确实发现它有时很有用),但似乎大型实用程序功能不会从中受益内联1更符合逻辑地声明static
2。
据我所知,在编译翻译单元时,gcc 会简单地删除未使用的static
函数(就像static inline
),因此它们根本不会造成二进制大小或链接时间开销。
我在这里错过了什么吗?是否有充分的理由认为未使用static
的功能比 更成问题static inline
?
1是的,我知道这只是一个提示,但 gcc 实际上在许多情况下都会提示。
2或者可能更好,只在头文件中声明并在文件中的其他位置定义.cpp
- 但这会禁止仅使用头文件,这有时很方便。