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

Posted

技术标签:

【中文标题】C main 函数是可选的吗?你可以在它之外编写代码吗?【英文标题】:Is the C main function optional and can you write code outside of it? 【发布时间】:2018-06-22 23:34:00 【问题描述】:

当我查看 GitHub 上的源代码时,main 函数经常被省略或者在它之外有代码。我做过的教程告诉我——我不能做这两件事。有什么我遗漏的吗?

【问题讨论】:

如果您正在查看库的来源,它们不会有 main,因为它们被设计为具有自己的入口点的应用程序的一部分。 你说的外面有代码是什么意思?除了什么? 显示示例...与适当的链接分享回购代码,以便我们进行验证。 main 函数不是可选的。但有时发布的代码(甚至在这里)是一些相关的行,而不是Minimal, Complete, and Verifiable example。 发布一个例子。 “外部代码”到底是什么意思? 【参考方案1】:

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

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

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


通常你可以说:

'代码必须存在于 C 中的函数中'(变量和宏除外) main 函数是 OS 执行二进制文件的入口点

[这有点简单,但 IMO 的一个很好的经验法则]

【讨论】:

【参考方案2】:

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

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

【讨论】:

不太准确。使用自定义启动器,您不需要主功能;) 这是不正确的。 C 标准定义了独立环境和托管环境。托管环境需要main。独立的环境没有。必须有一些入口点,但在独立环境中不一定是main【参考方案3】:

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

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

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

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

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

【讨论】:

以上是关于C main 函数是可选的吗?你可以在它之外编写代码吗?的主要内容,如果未能解决你的问题,请参考以下文章

CoreData:Not null 属性应该是可选的吗?

[react] 自定义组件时render是可选的吗?为什么?

URI 中的 Scheme 是可选的吗?

传递给 PDOStatement::bindParam() 的参数名称的前导冒号是可选的吗?

传递给 PDOStatement::bindParam() 的参数名称的前导冒号是可选的吗?

TensorFlow GPU:cudnn 是可选的吗?无法打开 CUDA 库 libcudnn.so