我从同事那里得知,无需编写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
,计算那里有多少参数,然后调用main
。后main
返回时,exit
被调用。
如果程序不想使用C运行时环境,则需要为其提供自己的代码_start
。例如,Go编程语言的参考实现是这样做的,因为它们需要一个非标准的线程模型,该模型要求堆栈具有一定的魔力。_start
当您要编写非常小的程序或执行非常规操作的程序时,提供自己的程序也很有用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句