c++ extern 共享变量
时间: 2024-07-31 13:00:39 浏览: 191
在 C++ 中,`extern` 关键字用于声明而不是定义变量。当你在一个作用域(如函数、文件或命名空间)中使用 `extern` 声明一个变量,实际上是在告诉编译器这个变量存在于另一个地方,需要链接阶段才能找到其实际的定义。如果你在头文件(`.h`)中使用 `extern` 定义变量,那么它被称为外部变量或全局变量,可以在程序的不同源文件中共享。
例如:
```cpp
// 文件 header.h
extern int sharedVariable;
// 文件 source.cpp
int sharedVariable = 0; // 这里是变量的定义
void someFunction() {
sharedVariable = 42;
}
// 另一个源文件 another_source.cpp
#include "header.h"
someFunction(); // 调用函数会修改 sharedVariable 的值
```
在这个例子中,`sharedVariable` 是在编译期间作为外部引用存在,而实际的变量定义在 `source.cpp` 中。这样可以方便地在多个模块之间共享数据,同时保持了封装性和模块化。
相关问题
c++ extern的作用
extern是C++中的一个关键字,它可以应用于一个全局变量,函数或模板声明,说明该符号具有外部链接属性。也就是说,这个符号在别处定义。在C++中,全局变量的作用范围仅限于当前的文件,但是C++也支持分离式编译,允许将程序分割为若干个文件被独立编译。因此,如果需要在文件间共享数据,就需要使用extern关键字。通过在一个文件中使用extern声明一个变量,可以在另一个文件中使用该变量,而不需要重新定义它。
举个例子,假设我们有两个文件file1.cpp和file2.cpp,它们都包含一个名为count的全局变量。如果我们想要在file2.cpp中使用file1.cpp中定义的count变量,我们可以在file2.cpp中使用extern声明该变量,如下所示:
```c++
// file1.cpp
int count = 0; // 定义全局变量count
// file2.cpp
extern int count; // 声明全局变量count
```
这样,在file2.cpp中就可以使用count变量了,而不需要重新定义它。
extern 静态变量类
extern 静态变量类是指在一个类中定义了一个静态成员变量,并且使用 extern 关键字进行声明。这样做的目的是为了在其他文件中能够访问该静态成员变量。
在C++中,静态成员变量是属于类的,而不是属于类的对象的。它在内存中只有一份拷贝,被所有该类的对象所共享。而且,静态成员变量在程序运行期间始终存在,直到程序结束才会被销毁。
当我们在一个类中定义了一个静态成员变量时,需要在类的定义外部进行初始化。这样的初始化通常发生在类的实现文件中。然而,如果我们想在其他文件中使用这个静态成员变量,就需要使用 extern 关键字进行声明。
下面是一个示例代码:
```cpp
// MyClass.h
class MyClass {
public:
static int myStaticVar;
};
// MyClass.cpp
#include "MyClass.h"
int MyClass::myStaticVar = 0;
// OtherFile.cpp
#include "MyClass.h"
extern int MyClass::myStaticVar;
int main() {
// 使用静态成员变量
MyClass::myStaticVar = 10;
return 0;
}
```
在上面的示例中,MyClass 类定义了一个静态成员变量 myStaticVar。在 MyClass.cpp 文件中进行了初始化,并在 OtherFile.cpp 文件中使用 extern 进行声明,以便在 main 函数中使用。
阅读全文