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

# Extra Clang Tools 21.1.8 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 global option HeaderFileExtensions.

- `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

[1] Undeprecating static