Search code examples
c++cstaticglobalextern

Okay to declare static global variable in .h file?


static keyword keeps the scope of a global variable limited to that translation unit. If I use static int x in a .h file and include that .h file every other file, won't they all belong to the same translation unit? Then, won't x be visible everywhere? So what is the role of static now?

Also, is there any use of static const int x ,where x is a global variable? Aren't all const global variables static by default? And is a const variable's scope limited to the TU even if it confined in a for loop in the file?


Solution

  • If you write

    static const int x
    

    in an .h file then every translation unit that #include-s this .h will have its own private variable x.

    If you want to have 1 global variable visible to everyone you should write

    extern const int x;
    

    in the .h file and

    const int x = ...;
    

    in one of the .cpp files.

    If you want to have a static const int visible to just one translation unit - don't mention it in the .h files at all.