首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >_start()在C中的用途是什么?

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

Stack Overflow用户
提问于 2015-04-17 16:52:54
回答 1查看 31.6K关注 0票数 143

我从我的同事那里学到,人们可以在不编写main()函数的情况下编写和执行C程序。可以这样做:

my_main.c

代码语言:javascript
复制
/* 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; 
}

使用以下命令进行编译:

代码语言:javascript
复制
gcc -o my_main my_main.c –nostartfiles

使用以下命令运行它:

代码语言:javascript
复制
./my_main

什么时候需要做这种事情呢?在现实世界中,有没有什么这样的场景是有用的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-17 17:10:49

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

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

票数 126
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29694564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档