我不明白为什么这不起作用。谢谢!
#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
在线编译答案 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之外定义。