全局变量不起作用

时间:2012-02-23 15:54:07

标签: c++ static global

我有一个全局int我想在不同的文件中进行更改,因为某些原因它不起作用。

我有:

// test.h

 #include <windows.h>

static int start1; //want to use this globally.

//declare
void something();

// TEST.CPP

#include "test.h" 

extern int start1;

void something()
{
    start1 = start1 + 1;
}

// main.cpp中

#include "test.h"
#include "stdafx.h"
#include <iostream>

int _tmain(int argc, _TCHAR* argv[])
{
    start1 = 3;
    something();
    return 0;
}

为什么,当你进入something() start1 0时,而不是3?我一直试图制作一个全局变量几个小时,但它不起作用。请有人澄清一下吗?

3 个答案:

答案 0 :(得分:10)

不要在头文件中声明static变量。这将导致为包含该头文件的每个翻译单元(即源文件)存在单独的变量。

规范模式是在头文件中将变量声明为extern,然后在一个源文件中“正常”定义它。

答案 1 :(得分:3)

您需要在标题中将int声明为extern。在.cpp文件中定义它时,它不需要任何限定符。静态限定符实际上意味着您声明的int只能在当前转换单元中访问,因此每个.cpp文件将获得它的不同版本。

答案 2 :(得分:0)

如果你把

static int start1;

在所有源文件中,您将获得静态效果,因为数据将是每个中的单独地址。 然后,您可以为每个单元保留单独的值/内容。

BUT。这本身并不是一个全局变量。全局变量是在单元之间共享的变量,而不是相反的变量。所以静态行为和全局(外部)内容存在差异......所以上面的答案是对的,但我想我可能会在讨论中添加一些观点。

我刚刚在C中运行了类似的设置,静态变量的行为相同。