【发布时间】:2015-12-11 20:33:12
【问题描述】:
C 中的 main() 函数有什么特别之处? 在我的嵌入式 C 编译器中,它告诉程序计数器从哪里开始。无论什么首先出现(作为指令)进入 main 函数,它将首先放置在闪存中。那么PC程序呢? PC端编程时main()是什么意思?
【问题讨论】:
-
main() 是运行时代码准备好开始执行程序时的已知入口点。
标签: c
C 中的 main() 函数有什么特别之处? 在我的嵌入式 C 编译器中,它告诉程序计数器从哪里开始。无论什么首先出现(作为指令)进入 main 函数,它将首先放置在闪存中。那么PC程序呢? PC端编程时main()是什么意思?
【问题讨论】:
标签: c
在托管实现(基本上,任何带有操作系统的东西)上,main 被定义为程序的入口点。它是程序启动时将由运行时环境调用的函数。
在独立实施(嵌入式系统、PLC 等)上,入口点是实施所说的任何内容。那可能是main,也可能是别的东西。
【讨论】:
简单来说:
main 函数没有什么特别之处,只是它在程序启动时被系统调用。
【讨论】:
void 函数,您可以在不返回值的情况下离开(自P99 起),并且在线程环境(POSIX 或C11)中,从main 返回会终止整个过程。
就 C 标准而言,主函数是“C 程序”开始的地方。但是在标准之外的现实世界中,有硬件的地方,在调用 main() 之前还需要做一些其他的事情。
在典型的嵌入式系统上,您有一个复位中断服务程序,您在上电复位(或其他复位原因)后结束。在此 ISR 中,应按以下顺序执行以下操作:
因此,当 main() 被调用时,您就有了一个足够稳定的环境,可以让标准 C 程序按预期执行。
使用 main() 作为复位向量是非正统和非标准的。 C 标准要求在调用 main() 之前已经初始化静态存储持续时间变量。另外,你真的不想做一些基本的事情,比如在 main() 中设置堆栈指针,因为这会弄乱你在 main() 中的所有局部变量。
【讨论】:
当您的操作系统运行程序时,您的程序需要将控制权交给它。并且操作系统只知道在main() 函数处您的程序内部从哪里开始。
【讨论】:
【讨论】:
main() 在程序启动时被调用(对于 托管 环境,请参阅其他答案)。这很简单,很好,将许多实现细节留给实现。但是,您的引文试图保持简单,同时不恰当地介绍了 操作系统。在常见的情况下,操作系统只有它们的二进制格式,它们有自己关于入口点的想法,而与你的程序相关联的一点C运行时将获得控制和照顾main() 的执行。小心一些在线资源;)
函数 main 很特别——你的程序在 主要的。这意味着每个程序都必须在某个地方有一个主程序。 main 通常会调用其他函数来帮助执行它的工作,一些是你写的,还有一些 来自为您提供的库。
您可以在所有可能的 C 书籍中找到它。
【讨论】:
main 函数允许 C 程序找到程序的开头。 main 函数总是在程序启动时被调用。
【讨论】: