c中的外部关键字问题

时间:2016-10-03 10:46:42

标签: c++ keyword extern

extern int i;
void add();

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

void add()
{
    int i;
}

在这种情况下我得到错误,即使变量i在add function

中定义

但在以下情况下它不会产生构建错误

extern int i;
void add();

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

void add(){
    //int i;
}

1 个答案:

答案 0 :(得分:2)

extern关键字告诉编译器假设变量是在别处定义的(不在此特定文件或转换单元中)。变量的名称将在链接阶段解析。

所以当你写:

extern int i;

您必须确保变量i在别处(在不同的文件中)定义。

请注意不要在您的i函数中混淆extern i和本地add - 此局部变量的范围在add函数内且无关使用extern i变量。

void add()
{
    int i;
}