zoukankan      html  css  js  c++  java
  • 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函数的代码。

  • 相关阅读:
    Android DSelectorBryant 单选滚动选择器
    Android BSearchEdit 搜索结果选择框
    Android TeaScreenPopupWindow多类型筛选弹框
    Android TeaPickerView数据级联选择器
    Android 兔子基金小工具
    Android 监听手机锁屏的工具类
    Android 弹出Dialog时隐藏状态栏和底部导航栏
    Android Studio 3.0+ Record Espresso Test 自动化测试
    Android GZIP压缩与解压
    体验 OpenDiablo2, 一款Golang开发的开源游戏
  • 原文地址:https://www.cnblogs.com/chenchenluo/p/2204932.html
Copyright © 2011-2022 走看看