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

SimpleGuy:

我从同事那里得知,无需编写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

什么时候需要做这种事情?在现实世界中是否有任何有用的场景?

fuz:

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章