有没有办法在没有主函数的情况下编写C程序?如果是这样,怎么能实现呢?
答案 0 :(得分:9)
C将托管环境中的入口点定义为main
。但是,在“独立”环境中,入口点可以有其他名称。这是语言(至少是官方)在特定方面允许的唯一纬度。
答案 1 :(得分:8)
是的,你可以。
_start
函数是调用 main()
的C程序的入口点。
从程序员的角度来看, main()
是一个C程序的起点。在调用 main()
之前,进程会执行大量代码以“清理执行空间”。
_start
是首先调用的函数,然后分配必要的资源,然后调用 main()
,该函数必须由程序员。
您可以覆盖 _start
并告诉编译器不要使用“ main()
来查找 -nostartfiles
“选项。
#include <stdio.h> //for using printf()
_start()
{
printf("Hello world!!\n");
_exit(0);
}
编译: gcc -nostartfiles code.c -o a.out
另请查看http://linuxgazette.net/issue84/hawk.html以获取更多基本信息。
答案 2 :(得分:4)
以下链接器滥用
char main[] = { /* Machine code for your target implementation */ };
可以在某些平台上运行。
答案 3 :(得分:3)
没有。 C完全基于你在main()中启动程序的假设。无论如何,你为什么要这个?这会使其他程序员阅读您的代码时出现不一致。
答案 4 :(得分:2)
也许这可行: http://www.gohacking.com/2008/03/c-program-without-main-function.html
另一种方法是编写C程序并查看Assembly输出: http://users.aber.ac.uk/auj/voidmain.shtml
有关调用main()之前发生的事情的更多信息,请参见此处(如何处理初始化函数): http://gcc.gnu.org/onlinedocs/gccint/Initialization.html