xref: /llvm-project/clang-tools-extra/docs/clang-tidy/checks/misc/use-anonymous-namespace.rst (revision cc38cd856d9a9df77d5d727377e38a891807774b)
165d6d67fSCarlos Galvez.. title:: clang-tidy - misc-use-anonymous-namespace
265d6d67fSCarlos Galvez
365d6d67fSCarlos Galvezmisc-use-anonymous-namespace
465d6d67fSCarlos Galvez============================
565d6d67fSCarlos Galvez
665d6d67fSCarlos GalvezFinds instances of ``static`` functions or variables declared at global scope
77fd83879SCarlos Galvezthat could instead be moved into an anonymous namespace.
865d6d67fSCarlos Galvez
965d6d67fSCarlos GalvezAnonymous namespaces are the "superior alternative" according to the C++
1065d6d67fSCarlos GalvezStandard. ``static`` was proposed for deprecation, but later un-deprecated to
1165d6d67fSCarlos Galvezkeep C compatibility [1]. ``static`` is an overloaded term with different meanings in
1265d6d67fSCarlos Galvezdifferent contexts, so it can create confusion.
1365d6d67fSCarlos Galvez
1435d9f873SCarlos GalvezThe following uses of ``static`` will *not* be diagnosed:
1535d9f873SCarlos Galvez
1635d9f873SCarlos Galvez* Functions or variables in header files, since anonymous namespaces in headers
1735d9f873SCarlos Galvez  is considered an antipattern. Allowed header file extensions can be configured
18*cc38cd85SCarlos Galvez  via the global option `HeaderFileExtensions`.
1935d9f873SCarlos Galvez* ``const`` or ``constexpr`` variables, since they already have implicit internal
2035d9f873SCarlos Galvez  linkage in C++.
2135d9f873SCarlos Galvez
2265d6d67fSCarlos GalvezExamples:
2365d6d67fSCarlos Galvez
2465d6d67fSCarlos Galvez.. code-block:: c++
2565d6d67fSCarlos Galvez
2665d6d67fSCarlos Galvez  // Bad
2765d6d67fSCarlos Galvez  static void foo();
2865d6d67fSCarlos Galvez  static int x;
2965d6d67fSCarlos Galvez
3065d6d67fSCarlos Galvez  // Good
3165d6d67fSCarlos Galvez  namespace {
3265d6d67fSCarlos Galvez    void foo();
3365d6d67fSCarlos Galvez    int x;
3465d6d67fSCarlos Galvez  } // namespace
3565d6d67fSCarlos Galvez
3665d6d67fSCarlos Galvez[1] `Undeprecating static <https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1012>`_
37