2015-09-10 34 views
0

我明白爲什麼這會不會鏈接:爲什麼值賦值排除extern關鍵字並聲明變量?

extern bool g_WinGame; 
... 
g_WinGame=true; 

但是爲什麼這編譯和鏈接?

extern bool g_WinGame=false; 
... 
g_WinGame=true; 

我使用MSVC 2010

[編輯]所有解釋HERE

+0

第二個例子中的'extern'可以忽略。它相當於'布爾g_WinGame =真' – 0x499602D2

+0

好吧,這就是問題,爲什麼它是合法的?因爲聲明extern似乎是合法的,所以它不是...... – Valmond

+1

因爲在使用'const'時可以使用extern覆蓋內部鏈接。例如,在名稱空間範圍內,「int const x = 5」具有內部鏈接,但「extern int const x = 5」具有外部鏈接。 – 0x499602D2

回答

3
extern bool g_WinGame; 

是一個聲明。

extern bool g_WinGame=false; 

是一個定義。這裏extern是多餘的,但合法。