C语言的体系结构--main函数存在的必然性(听杨力祥老师的课)

  注:不是原创,课堂上听来的,防止遗忘,所以记下来!

  C语言的体系结构分为两个部分:数据和函数,当然最终这两个部分都是要进入到计算机的内存中去。

  函数在编译后编程可执行代码,存放在代码区;数据分为几种:局部与全局,auto和static,简单的说就是放在静态数据区,堆中和栈中。

  对于全局的变量和静态的变量是在main函数之前创建的。

  C语言有个规定:全局区不能有可执行代码 ,可执行代码必须进入函数中。但是C语言中的函数都是全局的,这就导致函数不能嵌套定义:嵌套定义导致函数内部定义的函数成了局部函数。所以要解决各个函数的执行问题只能通过函数的嵌套调用。这时就需要有一个函数首先被执行,来调用其他一系列的函数,完成程序的功能,而这个第一个调用的函数就是main函数。

  以上就是main函数存在的必然性,本人文笔欠佳,解释不清的地方凑活着看吧。

  但是以上体系在C++中遇到了矛盾。C++的全局对象从C的体系结构上推是要先于main函数执行的。全局对象要在main函数执行之前建立,而对象的建立要执行构造函数,这样就导致了构造函数的执行早于main函数。而且用以下代码调试时确实结果显示构造函数早于main函数执行。

#include<iostream>

class T

{

  public:T(){cout<<"构造函数"<<endl;}

}

T t;

int main(void)

{

  cout<<"main"<<endl;

  return 0;

}

这就与C语言的体系结构有冲突了,所以说C++并不是一种纯面向对象的编程语言。至于怎么解决这个体系冲突,则由编译器决定,可能也是先进入main函数,只是进入之后跳转到构造函数那里创建类的对象之后再回来执行main函数的代码。

 

posted on 2011-10-10 00:15  沉沉-_-  阅读(1789)  评论(0编辑  收藏  举报

导航