1

我不明白为什么这行不通。谢谢!

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

编译导致以下错误:

main.c: In function 'main':  
main.c:6:9: error: declaration of 'i' with no linkage follows extern declaration  
main.c:5:16: note: previous declaration of 'i' was here

注意:在CompileOnline在线编译的代码

4

6 回答 6

8

这是行不通的,因为您试图i在同一范围内以两种截然不同的方式使用。

该名称i不能同时引用其他extern人正在定义的 某些数据 局部变量。

如果您只想分配给外部变量,请不要重新声明它:

extern int i;

i = 20;
于 2013-08-28T07:18:26.273 回答
3

您错误地重新声明i

#include <stdio.h>
#include <conio.h>
int main()
{
    extern int i;
    i=20;     //Simply assign the value here. why redeclare with `int`
    printf("%d",i);
}
于 2013-08-28T07:19:13.037 回答
3

您已经声明iintin

extern int i;

然后你继续并再次声明它

int i=20;

尝试这样做

extern int i;
i=20;
于 2013-08-28T07:19:18.857 回答
1
int i;

这里声明了变量 i 并为其分配了内存但未初始化。

extern int i;

每当使用 extern 时,该变量只是被声明并且不会为它分配内存。为了访问它,您必须在外部重新声明相同的变量。这里 extern 指的是,您将在程序(外部源)之外定义该变量(i)的值。在你的情况下,你在里面做,所以它不会像你预期的那样工作。它可以在主程序之外定义,也可以由外部程序定义。

尝试这个:

#include<stdio.h>
int main()
{
   extern int i; //Declared but memory not allocated
   printf("%d",i);
 return 0;
 }
int i=20; //Allocated memory for i and initialized to 20 outside the prog

输出:

20

全局外部变量也可以直接初始化,而局部外部变量不能。

#include<stdio.h>
extern int i=10; //Declared, Memory allocated and defined.
int main()
{
    extern int j; //Declared but memory not allocated
    printf("%d --> %d",i,j);
return 0;
}
int j=20; //Memory Allocated and value defined externally.

输出:

10 --> 20

您也可以参考此链接以了解更多信息。

于 2013-08-28T07:36:13.210 回答
1

您已声明i两次导致重新定义错误

于 2013-08-28T07:19:41.493 回答
0

extern向编译器指示在外部某处存在一个名为 的变量i,其类型为int.

在这里,outside可能在同一个程序中或在某个其他translation(另一个.c文件)单元中。

但是您正在重新声明i您已经声明的内容。

此外,如果您只执行以下程序(不链接其他文件.c),它将无法工作:

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

它给出了一个链接器错误,抱怨i未解决,因为链接器无法找到它的定义,i并且没有为它分配存储空间,因为它没有在 main 之外定义。

于 2013-08-28T08:22:22.547 回答