# Extra Clang Tools 22.1.2 documentation

## clang-tidy - misc-use-internal-linkage

# misc-use-internal-linkage

Detects variables, functions, and classes that can be marked as static or (in C++) moved into an anonymous namespace to enforce internal linkage.

Any entity that’s only used within a single file should be given internal linkage. Doing so gives the compiler more information, allowing it to better remove dead code and perform more aggressive optimizations.

Example:

    int v1; // can be marked as static

    void fn1() {} // can be marked as static

    // already declared as extern
    extern int v2;

    void fn3(); // without function body in all declaration, maybe external linkage
    void fn3();

    // === C++-specific ===

    struct S1 {}; // can be moved into anonymous namespace

    namespace {
      // already in anonymous namespace
      int v2;
      void fn2();
      struct S2 {};
    }

    // export declarations
    export void fn4() {}
    export namespace t { void fn5() {} }
    export int v2;
    export class C {};

## Options

FixMode

  Selects what kind of a fix the check should provide. The default is UseStatic.

  - None Don’t fix automatically.

  - UseStatic Add `static` for internal linkage variable and function.

AnalyzeFunctions

  Whether to suggest giving functions internal linkage. Default is true.

AnalyzeVariables

  Whether to suggest giving variables internal linkage. Default is true.

AnalyzeTypes

  (C++ only) Whether to suggest giving user-defined types (structs, classes, unions, and enums) internal linkage. Default is true.