Static variable has file scope. Say I have two following files:
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 .cpp
file with the contents of the .h
file inserted in place of each #include
directive.
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.cpp
includes file1.h
and file.h
, and each of the two headers defines its own Var1
.
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 include var1.h
from both file1.h
and file2.h
, not forgetting the #include guard in var1.h
.