C中的程序流程

时间:2015-02-04 07:04:23

标签: c

我刚刚经历了一些问题,发现这是一个问题,但问及关于声明和定义的问题,知道我理解,感谢stackoverflow。

int main()
{
extern int a;
printf("%d",a);
}
int a=20;

如果没有遇到任何控制语句,C程序的执行流程是从上到下,所以在上面的代码中 extern int a 声明一段时间 int a = 20 定义了一个但是这个语句甚至在main()终止后导致程序结束,那么为什么这段代码没有给出任何错误,如未定义的符号a?

1 个答案:

答案 0 :(得分:4)

最后一个int a=20;不是声明,而是定义。因此,变量a在程序开始之前初始化。

(在运行ELF可执行文件的Linux系统上,a可能位于某个data段,在您的程序execve(2)时初始化

extern int a;内的main 是某个全局符号的声明(在您的情况下恰好是稍后定义的变量a)。

您可以将int a=20;放在其他一些翻译单元中,并通过链接两者来构建您的程序。

阅读Levine's book on linkers and loaders