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.