C++头文件里声明的变量如何能让所有.cpp文件都可以对它进行修改值,而且修改后值要保存起来
现在在一个工程里有几个.cpp文件,我现在想声明一个全局变量,然后每个.cpp都可以对其修改,比如1.cpp对它进行赋值为1,当2.cpp要对它操作时,此时该全局变量的值...
现在在一个工程里有几个.cpp文件,我现在想声明一个全局变量,然后每个.cpp都可以对其修改,比如1.cpp对它进行赋值为1,当2.cpp要对它操作时,此时该全局变量的值仍旧为1,这样该怎么声明?(我用static声明静态全局变量,可是不行,当1.cpp对它赋值为1后,在2.cpp里我调用它,它值仍然是默认的0)
帮我我再追加300分
用1.cpp修改那个变量,是在编译后执行的时候发生的。所以,那个变量在2.cpp中仍然是默认值
我就是想用什么办法来让它可以给.cpp们改动,且值可以保存起来 展开
帮我我再追加300分
用1.cpp修改那个变量,是在编译后执行的时候发生的。所以,那个变量在2.cpp中仍然是默认值
我就是想用什么办法来让它可以给.cpp们改动,且值可以保存起来 展开
8个回答
展开全部
直接用extern 定义该变量皆可以了,我们工作当中都是这么写的
给个我们公司的程序的例子
例如ULONG g_1588State;
在另外一个文件里面extern ULONG g_1588State;
一下即可以了
extern
C/C++关键字
修饰变量,表示引用另一文件中的变量。
extern变量:用关键字extern说明的变量成为外部变量。
一个变量被说明为外部变量,其含义是告诉系统不必为其按一般变量那样分配内存,该变量已在这一局部的外边定义。
外部变量一般用于由多个文件组成的程序中,有些变量在多个文件中被说明,但却是同一变量,指出某一变量为外部变量就避免了重复分配内存。
如:
file.h:
void gogogo(int);
file1.cpp:
#include <iostream.h>
#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
给个我们公司的程序的例子
例如ULONG g_1588State;
在另外一个文件里面extern ULONG g_1588State;
一下即可以了
extern
C/C++关键字
修饰变量,表示引用另一文件中的变量。
extern变量:用关键字extern说明的变量成为外部变量。
一个变量被说明为外部变量,其含义是告诉系统不必为其按一般变量那样分配内存,该变量已在这一局部的外边定义。
外部变量一般用于由多个文件组成的程序中,有些变量在多个文件中被说明,但却是同一变量,指出某一变量为外部变量就避免了重复分配内存。
如:
file.h:
void gogogo(int);
file1.cpp:
#include <iostream.h>
#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
展开全部
你要明白一点是头文件是在预处理阶段被包含到.cpp文件中的,所以,你声明的那个变量在1.cpp和2.cpp编译之前就已经加到代码段里了。至于你用1.cpp修改那个变量,是在编译后执行的时候发生的。所以,那个变量在2.cpp中仍然是默认值
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你可以试下在头文件里面定义,然后CPP文件里面包含头文件使用
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这就简单了,在其中一个.cpp文件中定义全局变量,之后在头文件中将该全局变量声明为extern,如:
1.cpp
int g_var;
x.h
extern int g_var;
接下来,需要用到该全局变量的.cpp包含x.h头文件就OK了。
1.cpp
int g_var;
x.h
extern int g_var;
接下来,需要用到该全局变量的.cpp包含x.h头文件就OK了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
很简单:
在1.cpp里定义此变量:如 int g_var = 0;
在其它用到的.cpp里声明为extern就OK了. 如:extern int g_var;
在1.cpp里定义此变量:如 int g_var = 0;
在其它用到的.cpp里声明为extern就OK了. 如:extern int g_var;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询