为啥 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 函数参数 main(int argc, char *argv[])