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