簡體   English   中英

全局變量不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM