我有一个C ++解决方案,其中有一个全局变量,我想在解决方案文件中的项目中访问它。我知道这不推荐,但最好的方法是什么?
答案 0 :(得分:2)
解决方案中的所有项目 - 即您正在构建多个dll,在解决方案中分组到一起?
如果是这种情况那么你就会遇到一个问题,即一个dll中的全局不能被另一个dll轻易读取。您需要编写全局到共享内存并从那里读取所有dll。
另一种方法很简单:创建一个dll jsut来保存共享变量并将它们包装在一个pragma中。例如来自this link:
#pragma data_seg (".myseg")
int i = 0;
char a[32]n = "hello world";
#pragma data_seg()
然后你的每个不同的dll都可以与'data dll'链接,数据dll将包含一个变量的实例,无论它加载多少次或在哪个进程中。性能计数器使用此技术在生成数据的进程和读取并显示数据的perfmon.exe之间快速传递数据计数器。
答案 1 :(得分:1)
在最初具有全局变量的文件中定义变量一次,并在使用它的每个文件中声明变量extern
。
文件1:
int GlobalVariable;
int main(int argc, char *argv[]) {
// blablabla
}
文件2:
extern int GlobalVariable;
int somefunc(void) {
// blablabla
}
文件3:
extern int GlobalVariable;
// blablabla
答案 2 :(得分:1)
翻译单元和项目之间存在差异(特别是在Visual Studio中)。
在C和C ++中,您可以通过在声明前面使用static关键字来创建一个全局变量,只能从声明它的文件中访问它。可以从编译到程序中的任何C或C ++文件访问不使用static关键字的Globals。
但坦率地说,你的问题并不清楚。当你说Global
时,可以有很多观点,正如维基百科在Global Variables的文章中所说:
C语言不使用术语全局,但在单个文件中包含的小程序中,通过在所有函数之外声明变量可以获得相同的效果(见下文)。但是,这样的变量应该被称为外部变量,而不是全局变量,因为它的范围仅限于单个文件。
但是,您可以浏览这些链接,看看您是否可以解决您的具体问题:
Global variables/functions across different projects