我从同事那里了解到,无需编写函数即可编写和执行C程序main().它可以在下面完成
withoutMain.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;
}
Run Code Online (Sandbox Code Playgroud)
将其编译为:
my_main.c
运行方式为:
main()
我的问题是,何时需要做这种事情?一些现实世界的场景?
在C++中,main是否可以通过函数指针定义?例如:
int f(int, char**) {
return 0;
}
int (*main)(int, char**) = &f;
Run Code Online (Sandbox Code Playgroud)
此代码正确编译和链接,但在运行时会触发分段错误.我相信这可能是因为它试图将函数指针的值作为代码执行.
另外,如果在普通的C++中不可能,那么可以通过gcc的非标准功能来实现(可能以某种方式改变导出符号的类型).
最后,如果使用gcc指令无法实现,可以使用自定义链接描述文件吗?