【问题标题】: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 是的。

标签: c++ c


【解决方案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()
        • 需要准备堆栈
        • 全局变量需要初始化
        • 等等……

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-05
          • 1970-01-01
          • 1970-01-01
          • 2012-10-05
          • 2011-02-22
          相关资源
          最近更新 更多