1.. title:: clang-tidy - cppcoreguidelines-avoid-non-const-global-variables
2
3cppcoreguidelines-avoid-non-const-global-variables
4==================================================
5
6Finds non-const global variables as described in `I.2
7<https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#i2-avoid-non-const-global-variables>`_
8of C++ Core Guidelines.
9As `R.6 <https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rr-global>`_
10of C++ Core Guidelines is a duplicate of rule `I.2
11<https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#i2-avoid-non-const-global-variables>`_
12it also covers that rule.
13
14.. code-block:: c++
15
16    char a;  // Warns!
17    const char b =  0;
18
19    namespace some_namespace
20    {
21        char c;  // Warns!
22        const char d = 0;
23    }
24
25    char * c_ptr1 = &some_namespace::c;  // Warns!
26    char *const c_const_ptr = &some_namespace::c;  // Warns!
27    char & c_reference = some_namespace::c;  // Warns!
28
29    class Foo  // No Warnings inside Foo, only namespace scope is covered
30    {
31    public:
32        char e = 0;
33        const char f = 0;
34    protected:
35        char g = 0;
36    private:
37        char h = 0;
38    };
39
40The variables ``a``, ``c``, ``c_ptr1``, ``c_const_ptr`` and ``c_reference``
41will all generate warnings since they are either a non-const globally accessible
42variable, a pointer or a reference providing global access to non-const data
43or both.
44
45Options
46-------
47
48.. option:: AllowInternalLinkage
49
50   When set to `true`, static non-const variables and variables in anonymous
51   namespaces will not generate a warning. The default value is `false`.
52