我有一个全局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?我一直试图制作一个全局变量几个小时,但它不起作用。请有人澄清一下吗?
答案 0 :(得分:10)
不要在头文件中声明static
变量。这将导致为包含该头文件的每个翻译单元(即源文件)存在单独的变量。
规范模式是在头文件中将变量声明为extern
,然后在一个源文件中“正常”定义它。
答案 1 :(得分:3)
您需要在标题中将int声明为extern。在.cpp文件中定义它时,它不需要任何限定符。静态限定符实际上意味着您声明的int只能在当前转换单元中访问,因此每个.cpp文件将获得它的不同版本。
答案 2 :(得分:0)
如果你把
static int start1;
在所有源文件中,您将获得静态效果,因为数据将是每个中的单独地址。 然后,您可以为每个单元保留单独的值/内容。
BUT。这本身并不是一个全局变量。全局变量是在单元之间共享的变量,而不是相反的变量。所以静态行为和全局(外部)内容存在差异......所以上面的答案是对的,但我想我可能会在讨论中添加一些观点。
我刚刚在C中运行了类似的设置,静态变量的行为相同。