//--------------------------------------------------------
本文目录结构
|-提出问题
|-解决问题
|-推荐文章
|-作业
//--------------------------------------------------------
一、提出问题
①C程序main函数是必要的吗?
②程序从main函数开始吗?
③在main函数结束吗?
二、解决问题
main它不是必须要有的函数。它不是程序的开始点,也不是程序结束点。
分析:
main只是开发工具所规定的一个特殊函数名称而已,程序的入口点记录在可执行文件中的一个数据,该数据标明程序从哪个位置开始执行,这个数据是连接程序的时候由link.exe确定的,可以把程序的入口点 指定为任意函数,甚至可以自己编辑可执行文件修改程序的入口点。在默认情况下,link.exe会连接开发工具中带有的一个obj文件,并设置该obj中 的固定函数为程序的入口点,这个函数执行后会做一些初始化的事情,然后调用main函数。在执行连接的时候,如果不连接这个obj,程序中就可以没有 main函数。
程序最终生成的exe执行时,开始执行的是mainCRTStartup(或 wmainCRTStartup......以及其他)函数之一,而不是我们程序所写的main或WinMain等。连接器为什么要这样做?因为我们写的程序必须要使用到各种各样的运行时库函数才能正常工作,所有在执行我们自己写程序之前必须要先准备好所需要的一切库,之所以要连接它们是因为他们肩负着很重要的