main函数内部的extern存储类变量

时间:2015-06-24 06:29:55

标签: c storage-class-specifier

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

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

3 个答案:

答案 0 :(得分:1)

在函数main

extern int i;

i声明,而不是定义。它必须在某处定义。

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

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

答案 1 :(得分:1)

当您在函数内部声明变量var filename = result.get('sProviderName')+'-TSCA.pdf'; var downloadLink = document.createElement("a"); downloadLink.href = global.rootUrl + 'administrations/TscaDownload/'+iProviderId+'/'+filename; window.open(downloadLink.href,"TSCA", "", ""); 时,编译器会认为该变量是在其他translation unit中定义的。如果它没有在其他任何地方定义,那么您将收到链接器错误,指出链接器无法找到该变量。

答案 2 :(得分:-3)

看看你在主要使用extern存储类的时候然后我们的编译器用来在特定位置搜索变量的声明,这里extern代表编译器,这个变量在程序中的任何位置被声明它可以是本地的或者在范围之外,如果它没有找到任何声明,那么它给出了这个链接错误becoz它无法找到变量声明。