Static variable has file scope. Say I have two following files:
- file1.h
- file1.cpp
- file2.h
- file2.cpp
I have declared static variable say static int Var1 in both the header files. Both file1.h and file2.h are included in main.cpp file.
I did this since the static variable will have file scope so it won't conflict each other. But after compilation I found it is showing conflict.
Now static variable is behaving like a extern variable. On the other hand if I declare the static variable in both .cpp files, it compiles well.
I am unable to understand this behavior.
Can any body explain how scope and linkage are working in this scenario.
Static variables are local to the compilation unit. A compilation unit is basically a
.cppfile with the contents of the.hfile inserted in place of each#includedirective.Now, in a compilation unit you can't have two global variables with the same name. This is what's happening in your case:
main.cppincludesfile1.handfile.h, and each of the two headers defines its ownVar1.If logically these are two distinct variables, give them different names (or put them in different namespaces).
If these are the same variable, move it into a separate header file,
var1.h, and includevar1.hfrom bothfile1.handfile2.h, not forgetting the #include guard invar1.h.