2016-10-03 79 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; 
}