joe*_*han 0 c c++ program-entry-point function
可能重复:
程序执行是否始终从C中的main开始?
我想开始执行包含2个函数的程序(不包括main)
void check(void)
void execute(void)
Run Code Online (Sandbox Code Playgroud)
我想从check()开始执行,是否有可能在c/c ++中?
你可以用一个简单的包装器来做到这一点:
int main()
{
check();
}
Run Code Online (Sandbox Code Playgroud)
由于标准明确指定main为程序入口点,因此无法以任何其他方式进行移植.
编辑评论:不要这样做.在C++中,您可以滥用静态初始化以在静态初始化期间check调用main,但您仍然无法main合法地调用check.你可以先跑check.如评论中所述,这在C中不起作用,因为它需要常量初始化器.
// At file scope.
bool abuse_the_language = (check(), true);
int main()
{
// No op if desired.
}
Run Code Online (Sandbox Code Playgroud)
各种链接器有各种选项来指定入口点.例如.Microsoft链接器使用/ ENTRY:function:
/ ENTRY选项指定入口点函数作为.exe文件或DLL的起始地址.
GNU的ld 在命令文件中使用-e或ENTRY().
有人说,修改入口点是一个非常先进的功能,你必须完全理解它是如何工作的.首先,它可能导致跳过标准库初始化的加载.
小智 5
int main()
{
check();
return 0;
}
Run Code Online (Sandbox Code Playgroud)