16e566bc5SRichard.. title:: clang-tidy - cppcoreguidelines-avoid-non-const-global-variables 26e566bc5SRichard 36e566bc5SRichardcppcoreguidelines-avoid-non-const-global-variables 46e566bc5SRichard================================================== 56e566bc5SRichard 60f1f1d45SPiotr ZegarFinds non-const global variables as described in `I.2 70f1f1d45SPiotr Zegar<https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#i2-avoid-non-const-global-variables>`_ 80f1f1d45SPiotr Zegarof C++ Core Guidelines. 90f1f1d45SPiotr ZegarAs `R.6 <https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rr-global>`_ 100f1f1d45SPiotr Zegarof C++ Core Guidelines is a duplicate of rule `I.2 110f1f1d45SPiotr Zegar<https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#i2-avoid-non-const-global-variables>`_ 120f1f1d45SPiotr Zegarit also covers that rule. 136e566bc5SRichard 146e566bc5SRichard.. code-block:: c++ 156e566bc5SRichard 166e566bc5SRichard char a; // Warns! 176e566bc5SRichard const char b = 0; 186e566bc5SRichard 196e566bc5SRichard namespace some_namespace 206e566bc5SRichard { 216e566bc5SRichard char c; // Warns! 226e566bc5SRichard const char d = 0; 236e566bc5SRichard } 246e566bc5SRichard 256e566bc5SRichard char * c_ptr1 = &some_namespace::c; // Warns! 266e566bc5SRichard char *const c_const_ptr = &some_namespace::c; // Warns! 276e566bc5SRichard char & c_reference = some_namespace::c; // Warns! 286e566bc5SRichard 296e566bc5SRichard class Foo // No Warnings inside Foo, only namespace scope is covered 306e566bc5SRichard { 316e566bc5SRichard public: 326e566bc5SRichard char e = 0; 336e566bc5SRichard const char f = 0; 346e566bc5SRichard protected: 356e566bc5SRichard char g = 0; 366e566bc5SRichard private: 376e566bc5SRichard char h = 0; 386e566bc5SRichard }; 396e566bc5SRichard 402928746aSBjörn SvenssonThe variables ``a``, ``c``, ``c_ptr1``, ``c_const_ptr`` and ``c_reference`` 412928746aSBjörn Svenssonwill all generate warnings since they are either a non-const globally accessible 422928746aSBjörn Svenssonvariable, a pointer or a reference providing global access to non-const data 432928746aSBjörn Svenssonor both. 44*7c50187bSPascal Jungblut 45*7c50187bSPascal JungblutOptions 46*7c50187bSPascal Jungblut------- 47*7c50187bSPascal Jungblut 48*7c50187bSPascal Jungblut.. option:: AllowInternalLinkage 49*7c50187bSPascal Jungblut 50*7c50187bSPascal Jungblut When set to `true`, static non-const variables and variables in anonymous 51*7c50187bSPascal Jungblut namespaces will not generate a warning. The default value is `false`. 52