C++头文件里声明的变量如何能让所有.cpp文件都可以对它进行修改值,而且修改后值要保存起来

2025-02-25 13:27:35
推荐回答(5个)
回答1:

直接用extern 定义该变量皆可以了,我们工作当中都是这么写的
给个我们公司的程序的例子
例如ULONG g_1588State;
在另外一个文件里面extern ULONG g_1588State;
一下即可以了
extern
C/C++关键字
修饰变量,表示引用另一文件中的变量。
extern变量:用关键字extern说明的变量成为外部变量。
一个变量被说明为外部变量,其含义是告诉系统不必为其按一般变量那样分配内存,该变量已在这一局部的外边定义。
外部变量一般用于由多个文件组成的程序中,有些变量在多个文件中被说明,但却是同一变量,指出某一变量为外部变量就避免了重复分配内存。
如:
file.h:
void gogogo(int);

file1.cpp:
#include
#include "file.h"
int main() {
extern int i;
gogogo(4);
cout << i;
}
file2.cpp
#include "file.h"
int i;
void gogogo(int k) { i = k * 2; }
结果:8
如果要在C++程序中引用C程序中的变量,要在extern后加"C"。在appmodul.cpp(MFC核心头文件)中有一个例子extern "C" int WINAPI,引用了crtexe.c里的WINAPI变量。
常用的 extern "C" 是把导出函数声明为C编译。由于C++编译器在编译的时候会造成其函数名的该变,在其他应用程序中导致函数不可调用,而C编译器则不会在编译后改变其函数名。这样如果用C编译的程序来调用该dll中的函数时,可能会造成找不到该函数。但若要实现函数的重载应该使用def文件。
代码中使用如下实现
#ifdef __cplusplus
extern "C"{
#endif
C函数声明;
#ifdef __cplusplus
}
#endif

回答2:

你要明白一点是头文件是在预处理阶段被包含到.cpp文件中的,所以,你声明的那个变量在1.cpp和2.cpp编译之前就已经加到代码段里了。至于你用1.cpp修改那个变量,是在编译后执行的时候发生的。所以,那个变量在2.cpp中仍然是默认值

回答3:

你可以试下在头文件里面定义,然后CPP文件里面包含头文件使用

回答4:

这就简单了,在其中一个.cpp文件中定义全局变量,之后在头文件中将该全局变量声明为extern,如:
1.cpp
int g_var;

x.h
extern int g_var;

接下来,需要用到该全局变量的.cpp包含x.h头文件就OK了。

回答5:

很简单:
在1.cpp里定义此变量:如 int g_var = 0;
在其它用到的.cpp里声明为extern就OK了. 如:extern int g_var;