main函数开始前执行函数

先说下函数调用的过程,想了好几秒,举例一个不是那么精确的例子

如果你玩过这个游戏,那么就很快可以理解这个函数调用过程

  1. 小红跳到1号格子
  2. 小红跳到2号格子
  3. 小红跳到3号格子
  4. 小红跳到4、5号格子(4、5看成一个各种)
  5. .....
  6. 到回来的时候从4、5号格子跳到3号格子
  7. 然后3号格子到2,2到1.
  8. 把每一个格子当成一个函数(4、5看成一个各种、7、8同理)

可执行程序的执行环境,一个程序要运行,需要考虑是否依赖的问题。

  宿主环境(存在依耐性):

    你在WINDOWS平台使用VS编译了一个执行程序 *.exe,那么这个程序就属于该类型,你运行时必须基于操作系统。所以依赖windows操作系统。而操作系统下面有很多种不同格式的文件。*.exe,*.jpg。所以不同的操作系统下面的可执行程序有不同的格式。而操作系统为了让你的程序跑起来,为你的程序添加了一些列操作系统独有的东西,然后定义一个入口函数

    程序员在指定的入口函数中编写自己的代码。(意思是你要遵循操作系统的规则,要不然你就玩不了)

  独立环境(不存在依耐性):

    操作系统本身,你没听说过A操作系统必须运行在B系统吧。例如windows必须运行于linux系统环境下。

所以我们分析的是宿主环境下面的可执行程序

 VS6.0  

  *.C

  1. 建立一个C执行程序
  2. 下断点,查看对应的汇编指令 ALT+8
  3. 单步调试、找到退出程序的最后一条指令
  4. 查看对应指令的源码,该源码中是否有调用main函数的语句
  5. 拉到最上面,该函数调用main
  6. 该分析证明main函数不是第一个执行函数,在main的前面还有其他函数

   文字描述起来费劲,可以对照gif来观看,这里还需要知道一点,语言是一种标准规定,由编译器实现标准,那么不同的编译器实现手段不一样,当你用VS2015测试这个问题时,情况不一致。

可以这样理解这个问题,当从跳格子返回时,不是按照顺序9(87)6(54)321,而是9(87)6(54)3结束了,少了21

 

     

猜你喜欢

转载自www.cnblogs.com/binaryAnt/p/11084352.html