标签: c
我刚刚经历了一些问题,发现这是一个问题,但问及关于声明和定义的问题,知道我理解,感谢stackoverflow。
int main() { extern int a; printf("%d",a); } int a=20;
如果没有遇到任何控制语句,C程序的执行流程是从上到下,所以在上面的代码中 extern int a 声明一段时间 int a = 20 定义了一个但是这个语句甚至在main()终止后导致程序结束,那么为什么这段代码没有给出任何错误,如未定义的符号a?
答案 0 :(得分:4)
最后一个int a=20;不是声明,而是定义。因此,变量a在程序开始之前初始化。
int a=20;
a
(在运行ELF可执行文件的Linux系统上,a可能位于某个data段,在您的程序execve(2)时初始化{ SUP>
data
extern int a;内的main 是某个全局符号的声明(在您的情况下恰好是稍后定义的变量a)。
extern int a;
main
您可以将int a=20;放在其他一些翻译单元中,并通过链接两者来构建您的程序。
阅读Levine's book on linkers and loaders