如何从不同的函数开始执行c/c ++中的程序,但不是main()

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 ++中?

Mar*_*k B 9

你可以用一个简单的包装器来做到这一点:

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)

  • 对你获得赞成票感到羞耻(但无论如何都是+1). (4认同)

Rem*_*anu 7

各种链接器有各种选项来指定入口点.例如.Microsoft链接器使用/ ENTRY:function:

/ ENTRY选项指定入口点函数作为.exe文件或DLL的起始地址.

GNU的ld 在命令文件中使用-e或ENTRY().

有人说,修改入口点是一个非常先进的功能,你必须完全理解它是如何工作的.首先,它可能导致跳过标准库初始化的加载.


小智 5

int main()
{
    check();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • 在我看来,返回值的函数应该在末尾有一个`return value;`语句.我更喜欢编写的代码如图所示. (7认同)