为什么这段代码不起作用?

时间:2013-08-28 07:17:19

标签: c

我不明白为什么这不起作用。谢谢!

#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

在线编译

6 个答案:

答案 0 :(得分:8)

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

名称i无法引用两个其他人定义的某些extern数据,一个本地变量。

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

extern int i;

i = 20;

答案 1 :(得分: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);
}

答案 2 :(得分:3)

您已在{/ 1>中将i声明为int

extern int i;

然后你继续用

再次声明它
int i=20;

尝试这样做

extern int i;
i=20;

答案 3 :(得分:1)

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

答案 4 :(得分: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

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

答案 5 :(得分: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之外定义。