0

我对静态和外部存储类感到非常困惑。我不明白下面的代码片段有什么问题。我希望 printf 打印零值。构建失败并出现错误“未定义对 'i' 的引用”。我希望语句“extern int i”是有效的C语句。不是吗?

#include<stdio.h>
void main()
{
 extern int i;
 printf("%d", i);
 }
4

3 回答 3

1

在函数中main

extern int i;

是 的声明i而不是定义。它必须在某个地方定义。

#include<stdio.h>
int i;               //definition
int main()
{
    extern int i;    //declaration
    printf("%d", i);
}

在此示例中,声明有效,但可以省略。

于 2015-06-24T06:33:02.850 回答
1

当您将变量声明为extern函数内部时,编译器认为该变量是在其他翻译单元中定义的。如果它没有在其他任何地方定义,那么您将收到一个链接器错误,指出链接器找不到该变量。

于 2015-06-24T06:33:51.213 回答
-3

看看当你在 main 中使用 extern 存储类时,我们的编译器使用在特定位置搜索变量的声明,这里 extern 代表编译器,该变量在程序中的任何位置声明,它可以是本地的或外部的scope ,如果它没有找到任何声明,那么它会给出这个链接错误,因为它无法找到变量声明。

于 2015-06-24T07:06:58.363 回答