为啥 main 函数首先在 c/c++ 中运行? [复制]

Posted

技术标签:

【中文标题】为啥 main 函数首先在 c/c++ 中运行? [复制]【英文标题】:why main function run first in c/c++? [duplicate]为什么 main 函数首先在 c/c++ 中运行? [复制] 【发布时间】:2019-02-06 13:49:40 【问题描述】:

为什么 main() 函数首先运行然后其他函数如果我们希望另一个函数先运行然后是 c 或 c++ 中的 main 函数怎么办? 谁能解释一下它背后的逻辑。谢谢。

【问题讨论】:

如果您想先运行另一个函数,请在 main() 的开头调用它。 你有解释语言的编程背景,不是吗?有了这些信息,答案可以与您习惯的概念进行比较。 在C++中,全局对象的构造函数不是在main之前调用吗? @Osiris 是的。 【参考方案1】:

因为这是标准定义要使用的语言(此处引用 C++):

[basic.start.main]

程序应包含一个名为main 的全局函数。执行一个程序会启动一个执行主线程(...),其中调用主函数(...)

因此,编译器必须以在程序由操作系统启动时调用main 的方式生成二进制文件,或者在独立环境的情况下,在加载时调用。

从技术上讲,它不必是生成的程序集中的第一个 call。编译器可以插入一些额外的启动代码(如初始化变量等),这些代码本身可以组合成函数。这不是 C++ 程序开发人员关心的问题,但在嵌入式系统上变得非常重要,您需要/希望了解几乎每条执行的指令。

【讨论】:

【参考方案2】:

您需要在执行开始的程序中有一个位置。在 C 中它是函数 main。

但是程序在调用 main 之前开始执行。在main 代码为您的程序准备执行环境之前,它被称为 启动代码。

【讨论】:

【参考方案3】:

这是因为您可以在程序中创建任意个函数。您可以拥有 1 个函数、10 个、2340 个函数或其他任何函数。程序需要知道从哪里开始。这就是 main 函数的用途,因为它始终是第一个调用的函数。

【讨论】:

【参考方案4】:

程序必须从某个地方开始...就开发人员而言,这通常是main() - 称为“entry point”。

如果你想在程序的开头做某些事情,那么只需将main()的内容移动到另一个函数中(如run()),并将启动代码放在main()中,然后再调用@987654327 @。

#include <stdio.h>

void init(void) 
    /* startup */


void run(void) 
    /* application functionality */


int main(void) 
    init();

    run();

    exit 0;


就更广泛的系统而言,首先要进行大量设置:

需要创建进程(例如:fork()) 需要准备堆栈 全局变量需要初始化 等等……

【讨论】:

以上是关于为啥 main 函数首先在 c/c++ 中运行? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

C语言中的main()函数返回值是啥?

C语言 main 函数参数 main(int argc, char *argv[])

C语言 main 函数参数 main(int argc, char *argv[])

C++main函数赋予形式参数

C++main函数赋予形式参数

C++main函数赋予形式参数