```cpp // a.h static int a=10; ``` ```cpp // b.h #include "a.h" extern int a; // void func(); ``` ```cpp // b.cpp #include "b.h" #include <iostream> /* void func() { a=20; std::cout<<a<<std::endl; }*/ ```cpp ``cpp //c.h #include "b.h" extern int a; ``` ``cpp //c.cpp #include "c.h" #include <iostream> using namespace std; int main() { cout<<a<<endl; // func(); cout<<"***************"<<endl; cout<<a<<endl; return 0; } ``` a.h中的静态全局变量a被多个源文件重复包含,为什么不报错
时间: 2024-04-01 15:32:54 浏览: 58
CPP.rar_cpp.圆周率
这里的静态全局变量 a 是在头文件 a.h 中被定义的,当多个源文件包含了 a.h 后,每个源文件的 a 都是独立的,它们在各自的文件作用域内是不同的变量。所以即使多个源文件都包含了 a.h,也不会出现重复定义的错误。但是需要注意的是,如果这些源文件中有文件包含了 b.h,并且使用了 extern int a; 来声明 a,由于 a 是一个静态变量,它的作用域只限于 a.cpp 文件内部,其他文件使用 extern int a; 声明的是另一个不同的变量,如果在这些文件中修改了 a 的值,对其他文件中的 a 不会产生影响。
阅读全文