2016-10-03 78 views
-3
extern int i; 
void add(); 

int main() 
{ 
    add(); 
    if (i == 0) 
     printf("scope rules\n"); 
} 

void add() 
{ 
    int i; 
} 

我在這種情況下,即使變量i在附加功能extern關鍵字問題

定義,但它會在以下情況下

extern int i; 
void add(); 

int main() 
{ 
    int i; 
    //add(); 
    if (i == 0) 
     printf("scope rules\n"); 
} 

void add(){ 
    //int i; 
} 
+2

你需要閱讀一本關於C或C++的書,它將詳細解釋這一點。 –

回答

2

extern關鍵字告訴給沒有生成錯誤得到錯誤編譯器假定該變量是在別處定義的(不在此特定文件或翻譯單元中)。變量的名稱將在鏈接階段解析。

所以,當你寫:

extern int i;

你必須確保變量i在別處定義(在不同的文件)。

而且當心不要混淆的extern i和當地iadd功能 - 這個局部變量有add函數內部範圍和無關與EXTERN i變量。

void add() 
{ 
    int i; 
}