C++程序的前世今生

C++的进入点是main()吗?

什么代码比main()更早被执行?

在linux下我们可以写一个startup code,通常情况下main()是通过startup code调用的,所以startup code会比main()更早执行,它是C++真正的进入点(entry point)。

下面我们来写一段startup code:

首先创建一个entrypoint.c文件(.cpp也可以),写入我们的startup code。

在这个startup中我们有两个函数,一个blabla()函数,一个main()函数,接下来我们将blabla()函数设置为entry pont(C/C++程序进入点),使用gcc的-e指令进行编译,就可以以告诉链接器使用blabla作为程序进入点,执行结果如下:

我们可以看到,main()函数并没有被startup code调用,所以并没有被执行。

而startup code实际上为一个函数,所以startup code一定是C/C++程序中最早被执行的函数。

而在Windows下的C++程序又分为命令行(console),窗体程序(Win32),以及动态链接库(WinDll),他们的主函数名称各不相同,startup code会争对不同的C++程序调用不同的主函数。

在VC6.0下,默认的Startup code由4个文件组成,分别为crt0.c,wcrt0.c,wincrt0.c,wwincrt0.c,而wcrt0.c,wincrt0.c,wwincrt0.c这三个文件全部include了crt0.c,所以startup code的核心全部在crt0.c中。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注