misc-use-anonymous-namespace¶
Finds instances of static
functions or variables declared at global scope
that could instead be moved into an anonymous namespace.
Anonymous namespaces are the “superior alternative” according to the C++
Standard. static
was proposed for deprecation, but later un-deprecated to
keep C compatibility [1]. static
is an overloaded term with different meanings in
different contexts, so it can create confusion.
The following uses of static
will not be diagnosed:
Functions or variables in header files, since anonymous namespaces in headers is considered an antipattern. Allowed header file extensions can be configured via the HeaderFileExtensions option (see below).
const
orconstexpr
variables, since they already have implicit internal linkage in C++.
Examples:
// Bad
static void foo();
static int x;
// Good
namespace {
void foo();
int x;
} // namespace
Options¶
- HeaderFileExtensions¶
Note: this option is deprecated, it will be removed in clang-tidy version 19. Please use the global configuration option HeaderFileExtensions.
A semicolon-separated list of filename extensions of header files (the filename extensions should not include “.” prefix). Default is “;h;hh;hpp;hxx”. For extension-less header files, using an empty string or leaving an empty string between “;” if there are other filename extensions.