gpt4 book ai didi

c - C中_start()有什么用?

转载 作者:太空狗 更新时间:2023-10-29 16:14:39 28 4
gpt4 key购买 nike

我从同事那里了解到,无需编写 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

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

最佳答案

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

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

关于c - C中_start()有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29694564/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com