_start()在C中的用途是什么?

我从我的同事那里学到,可以编写和执行一个C程序,而无需编写一个main()函数。它可以做如下

没有

// Compile it with gcc -nostartfiles

void _start() {
  int ret = my_main();
  exit(ret); 
}

int my_main() {
  puts("This is a program without main!\n");
  return 0; 
}

编译为:
gcc -o withoutMain withoutMain.c -nostartfiles

运行它:
./ withoutMain

我的问题是什么时候需要做这样的事情?一些现实世界的情况?

符号_start是程序的入口点。也就是说,该符号的地址是跳转到程序启动的地址。通常,名为_start的函数由一个名为crt0.o的文件提供,该文件包含C运行时环境的启动代码。它设置一些东西,填充参数数组argv,计数有多少参数,然后调用main。主要返回后,调用exit。

如果程序不想使用C运行时环境,则需要为_start提供自己的代码。例如,Go编程语言的参考实现是这样做的,因为它们需要一个非标准的线程模型,它需要堆栈的一些魔法。当你想编写非常小的程序或程序做非常规的事情时,提供你自己的_start也是有用的。

http://stackoverflow.com/questions/29694564/what-is-the-use-of-start-in-c

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:_start()在C中的用途是什么?