2015-07-06 67 views
2

所以,讓我們說,我有:可以在C中聲​​明一個靜態變量extern:

file1.c

int i; 
static int j; 
int main() 
{ 
    for (int k = 0; k < 10; k++) 
    { 
     int foo = k; 
    } 
} 

file2.c

{ 
// the following statements are before main. 
extern int i; // this is acceptable, I know since i acts as a global variable in the other file 
extern int j; // Will this be valid? 
extern int foo; // Will this be valid as well? 
} 

因此,我有一個疑問,打上一個問號的聲明,他們會有效嗎?

+1

這可以幫助您http://stackoverflow.com/questions/2841762/why-wont-extern-link-to-一個靜態變量 – HighPredator

+0

什麼阻止你問你的編譯器? – molbdnilo

+0

這個問題沒有任何意義,extern和static是彼此的對立面。你實質上是在問:「紅車在紅色的時候可以變成藍色嗎?」。 – Lundin

回答

5

不!全局變量有文件範圍(內部鏈接),所以你不能使用它們,因爲它們具有外部鏈接...這並不意味着你不能使用外部鏈接具有相同名稱的變量,但它不能是一個static

更正爲i

j錯誤,至少不能是file1.c中定義的錯誤。

foo錯誤,至少對於file2.c中使用的本地變量沒有外部鏈接(根本沒有鏈接)。局部變量只有在聲明它的塊被激活時才存在,所以在外面訪問它是無意義的。

+0

沒錯!沒有鏈接=>沒有外部鏈接。我沒有說局部變量有內部連接...... OP只是想知道*外部連接* –

0

extern int j;不是有效的 - >靜態變量在文件範圍內

extern int foo;無效 - > foo是一個本地變量,其作用域在'for'循環中

相關問題