[英]global variable doesn't work
我有一個全局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? 我已經嘗試了幾個小時的全局變量,但它不起作用。 請有人能澄清一下嗎?
不要在頭文件中聲明static
變量。 這將為包含該頭文件的每個翻譯單元(即源文件)存在一個單獨的變量。
規范模式是在頭文件中將變量聲明為extern
,然后在一個源文件中“正常”定義它。
您需要在標頭中將int聲明為extern。 在.cpp文件中定義它時,不需要任何限定符。 靜態限定符實際上意味着您要聲明的int僅可在當前翻譯單元中訪問,因此每個.cpp文件將獲得一個不同的版本。
如果你把
static int start1;
在所有源文件中 ,您將獲得靜態效果,因為數據將是每個文件中的單獨地址。 然后,您可以為每個單位保留單獨的值/內容。
但。 這本身不是全局變量。 全局變量是在單元之間共享的變量,而不是相反的變量。 因此,靜態行為和全局(外部)內容有所不同...因此,以上答案是正確的,但我認為我可能會為討論添加一些視角。
我只是在C中運行了類似的設置,並且靜態變量的行為相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.