重读《C++ Primer Plus》笔记 之 对main()的理解

本文探讨了C语言中main函数的独特性质,包括其作为程序入口的原因及如何被操作系统调用的过程。文中还讨论了main函数的不同形式及其在运行时环境中的实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从上学开始学C语言,就知道写程序要有个入口,就是main()这个方法;好像它从来都是一个有特殊地位的、不需要解释的、被忽略存在。直到现在才突然想起来,研究一下这个main()方法到底特殊在哪里。

首先列一下我想到的关于main()方法的几点特殊之处:

  1. 谁来调用这个main()方法
  2. 可以写int main();也可以写int main(int argc, char** argv);C语言不支持多态,调用main方法的地方是怎么办到的

关于第一个问题,我在这篇博客中发现了一些答案:https://blog.youkuaiyun.com/honglicu123/article/details/48396923 我按照我未经验证的理解总结一下:执行一个程序,首先由操作系统创建一个进程出来,然后把控制权交给glibc库中的__libc_start_main方法,再调用crt1.o中的_start方法,最终调用到我们的main方法中来。中间涉及到多个链接操作。

第二个问题呢,因为main方法是在crt1.o的_start方法中被调用的,那么看一下crt1.o的源代码应该能找到答案。crt看名字应该是C Runtime Library里的,那就从glibc里找一下。glibc代码地址:https://www.gnu.org/software/libc/sources.html 拉代码花了好久,我等会儿就直接把相关部分贴上来。

暂时还没找到!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值