这不是修复或其他问题。只想知道行为
#include <stdio.h>
extern int var;
int main()
{
var = 10;
printf("%d ", var);
return 0;
}
在这里,我们可以看到var
被定义为extern
,main()
函数var
内部已定义。但是当输出var
时出现了错误
对
var
的未定义引用。
然后价值10
去哪儿了?它会转到extern var
还是存储在垃圾记忆库中?
那么在第var =10
行和下一行的编译过程中究竟发生了什么。
编译日志:
Compilation error time: 0 memory: 2156 signal:0
/home/PpnviQ/ccRtZapf.o: In function `main':
prog.c:(.text.startup+0x13): undefined reference to `var'
collect2: error: ld returned 1 exit status
答案 0 :(得分:9)
在您的代码中,
extern int var;
是 声明 ,而不是定义。因此,在完整的翻译单元中,永远不会定义var
。因此,当您尝试使用时,您的链接器(是特定的)会抱怨,(将值赋给var
)。