C main 函数是可选的吗?您可以在它之外编写代码吗?

Is the C main function optional and can you write code outside of it?

当我查看 GitHub 上的源代码时,经常会省略 main 函数或者在它之外有代码。我完成的教程告诉我 - 我不能做这些事情。有什么我想念的吗?

根据定义,EXECUTABBLE 二进制文件有一个作为应用程序入口点的 main 方法。

LIBRARIES(或者更确切地说,任何不需要由 OS 执行的东西都不必具有主要功能

所以 C 代码本身可以在没有 main 函数的情况下生活得很好。你不能将任意代码放在函数之外(无论是 main 还是其他)..


通常你可以说:

  • 'code has to live in a function in C'(变量和宏除外)
  • main 函数是 OSs 执行二进制文件的入口点

[这有点简单,但在我看来是一个很好的经验法则]

这样的示例根本不完整,要使程序正常工作,必须有一个入口点(对于标准 C,这是主要的)。代码语句必须在函数内部,尽管该函数不必是 main。

但是,可以在函数体之外使用带有初始值设定项的变量。

托管在操作系统中的正常完整 C 程序必须具有 main 例程。

GitHub 上的项目可能只是程序的一部分,例如打算在其他程序中使用的例程集合。 (这样的集合通常称为库。)如果源代码本身不打算成为一个完整的程序,那么它不需要有一个 main 例程。 main 例程将由在自己的程序中使用例程集合的人稍后添加。

C源代码也可以与其他编程语言编写的源代码结合编译使用。 C 标准未指定此行为,因此它特定于执行此操作时使用的各种开发人员工具。这样的混合程序肯定有一些主例程,但它可能被称为 main 以外的东西。尽管如此,main作为主程序的名称已经变得非常流行,因此使用非常频繁。

C源代码可用于特殊软件,如操作系统内核。 C 标准描述了一个独立的环境,与托管环境形成对比。在独立环境中,很多东西都是针对特定系统定制的,包括如何设置程序的起始地址。在这种情况下,主入口点可能被称为 start 而不是 main,例如,该入口点的地址可能会以硬件特有的一些特殊数据结构传送给硬件。

关于函数外的代码,可能是初始化表达式。 (对于在函数之外的初始化中可以使用哪些表达式有严格的限制。您不能在这些表达式中编写通用的 C 代码。)您必须展示具体示例才能得到答案。