C++ 编译单元与静态链接问题
我将完全改写这个问题,因为我不太明白我想要的解决方案(它们很有帮助,但它们没有说任何东西,而我提到的其他问题没有说) 给定以下4个文件: 文件#1:A.h 文件#2:A.cpp 文件#3:B.h 文件#4:B.cpp 问题#1:既然B.h包括A.h,那么A.cpp是B的编译单元的一部分吗 问题#2:由于A.cpp和B.cpp都声明了静态变量(x)的相同名称,是否会出现错误?我听说静态全局变量有静态链接,这取决于翻译单元,但由于我不知道问题1,这对我帮助不大。C++ 编译单元与静态链接问题,c++,compilation,C++,Compilation,我将完全改写这个问题,因为我不太明白我想要的解决方案(它们很有帮助,但它们没有说任何东西,而我提到的其他问题没有说) 给定以下4个文件: 文件#1:A.h 文件#2:A.cpp 文件#3:B.h 文件#4:B.cpp 问题#1:既然B.h包括A.h,那么A.cpp是B的编译单元的一部分吗 问题#2:由于A.cpp和B.cpp都声明了静态变量(x)的相同名称,是否会出现错误?我听说静态全局变量有静态链接,这取决于翻译单元,但由于我不知道问题1,这对我帮助不大。 翻译单元由来自预处理器的所有内容组成
- 翻译单元由来自预处理器的所有内容组成。在gcc中,尝试
查看这是什么g++-emyfile.cpp
- 静态全局具有静态链接,因此它们的名称不会溢出到TU之外。在每个单独的TU中,静态全局(无论是否同名)将是一个单独的对象,仅位于该TU的本地
class A { void a_func(); };
#include "A.h"
static int x = 4;
void A::a_func() {
//implementation.
}
#include "A.h"
class B { void b_func(); };
#include "B.h"
static int x = 3;
void B::b_func() {
//implementation.
}