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


    注:不是原创,课堂上听来的,防止遗忘,所以记下来!
      C语言包括两个部分:数据和函数,当然最终这两个部分都是要进入到计算机的内存中去。
      函数在编译后生成可执行代码,存放在代码区;数据分为几种:局部与全局,auto和static,简单的说就是放在静态数据区,堆中和栈中。
      对于全局的变量和静态的变量是在main函数之前创建的。
      C语言有个规定:全局区不能有可执行代码 ,可执行代码必须进入函数中。但是C语言中的函数都是全局的,这就导致函数不能嵌套定义:嵌套定义导致函数内部定义的函数成了局部函数。所以要解决各个函数的执行问题只能通过函数的嵌套调用。这时就需要有一个函数首先被执行,来调用其他一系列的函数,完成程序的功能,而这个第一个调用的函数就是main函数。
      以上就是main函数存在的必然性,本人文笔欠佳,解释不清的地方凑活着看吧。
      但是以上体系在C++中遇到了矛盾。C++的全局对象从C的体系结构上推是要先于main函数执行的。全局对象要在main函数执行之前建立,而对象的建立要执行构造函数,这样就导致了构造函数的执行早于main函数。而且用以下代码调试时确实结果显示构造函数早于main函数执行。
    #include<iostream>
    using namespace std;
    
    class T
    {
      public:T()
    	{
    		cout << "构造函数" << endl;
    	}
    }
    
    T t;
    
    int main(void)
    {
      cout << "main" << endl;
      return 0;
    }

    这就与C语言的体系结构有冲突了,所以说C++并不是一种纯面向对象的编程语言。至于怎么解决这个体系冲突,则由编译器决定,可能也是先进入main函数,只是进入之后跳转到构造函数那里创建类的对象之后再回来执行main函数的代码。
    Keep it simple!
    作者:N3verL4nd
    知识共享,欢迎转载。
  • 相关阅读:
    WebView与 JS 交互方式
    ES6常用知识点
    Flash Builder 破解与开发环境配置
    如何修改默认浏览器
    基本数据类型和常用内建对象
    VS 2010 使用技巧
    javascript之事件驱动编程的几个基本概念
    javascript笔记之DHTML基础
    浏览器对象模型
    开发心得记录
  • 原文地址:https://www.cnblogs.com/lgh1992314/p/5834683.html
Copyright © 2020-2023  润新知