这是个有意思的问题。在 linux 里面,根据TIS 的ELF规范,一个可执行程序,也就是一个可执行的对象文件,它有一个程序进入点,这个进入点不是
我们写的 main 函数,而是位于 c 库中的 _start 汇编代码中。在这个汇编代码中,它会去调用我们写的 main C函数,而这个调用是写死的,所以
我们没办法不用 main 函数。 实际上,假如你的C程序没用用 main 函数,那用 gcc 链接的时候,将会报错。

这个问题,对我们这些学嵌入式系统开发的人来说,应该知道。我们知道,在嵌入式系统上电之后,最先得到执行的将是一小段做初始化用的汇编
代码,这段汇编代码做完硬件如内存控制器的初始化后, 将会给我们准备一个可供 C 程序运行的环境,说白了就是,要准备一个堆栈。 堆栈准备好 后,它会跳转到 C 语言中定义的函数中去继续执行C程序。 那么这个时候,是不是要用 main 函数就随你了,你可以使用其他的,如 tain, bain
之类的任何名称,因为你自己可以修改汇编代码。

回到这个问题,或许可以使用宏来绕过去 main 函数的字面定义 ,但那不是真正的不用main函数,你们可以试一下。

另外 何 也可以研究一下,main 函数在linux 中是如何得到执行的。

Logo

更多推荐