clang-tidy - misc-use-anonymous-namespace — Extra Clang Tools 17.0.6 documentation

# Extra Clang Tools 17.0.6 documentation

## clang-tidy - misc-use-anonymous-namespace

# 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` or `constexpr` 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.

[1] Undeprecating static