我从我的同事那里学到,人们可以在不编写main()
函数的情况下编写和执行C程序。可以这样做:
my_main.c
/* Compile this with gcc -nostartfiles */
#include <stdlib.h>
void _start() {
int ret = my_main();
exit(ret);
}
int my_main() {
puts("This is a program without a main() function!");
return 0;
}
使用以下命令进行编译:
gcc -o my_main my_main.c –nostartfiles
使用以下命令运行它:
./my_main
什么时候需要做这种事情呢?在现实世界中,有没有什么这样的场景是有用的?
发布于 2015-04-17 17:10:49
符号_start
是程序的入口点。也就是说,该符号的地址是程序开始时跳转到的地址。通常,名为_start
的函数由一个名为crt0.o
的文件提供,该文件包含C运行时环境的启动代码。它设置一些东西,填充参数数组argv
,计算有多少个参数,然后调用main
。在main
返回后,将调用exit
。
如果程序不想使用C运行时环境,它需要提供自己的_start
代码。例如,Go编程语言的参考实现之所以这样做,是因为它们需要一个非标准的线程模型,这需要一些堆栈的魔力。当您想要编写非常小的程序或执行非常规操作的程序时,提供您自己的_start
也很有用。
https://stackoverflow.com/questions/29694564
复制相似问题