C,C ++,Java,C#中的main()

main()(或Main())是C,C ++,Java或C#,用户定义的函数还是内置函数?

它是用户定义的函数,是程序执行所必需的。 当您使用编译语言运行程序时, mainfunction是执行的function。 例如,在Java中,如果在类中具有签名public static void main(String ... args)的函数,则可以执行该类,因为JVM将执行该main方法的内容。

Java中的示例:

 public class Test { public static void main(String ... args) { System.out.println("Hello World"); } } 

 javac Test.java 

 java Test 

“Hello World”的结果将打印到控制台。

我不确定内置与用户定义的含义。 几乎没有语言实际上为您的用户定义函数提供了成为程序真正入口点的特权。 C ++,任何.NET语言和Java都有隐藏的(内置)入口点方法,这些方法又调用用户定义的Main方法(或者调用该语言的入口点方法 – 在.NET中它可以被命名什么,虽然C#和VB.NET强迫它被称为Main)。

所以是的,几乎每种语言都有一个自动调用的方法概念,这种方法是用户定义的方法,通常是强制性的。 但实际上每种语言都有一个内置的入口点方法,它实际上在调用用户定义的“入口点”函数之前为进程设置框架和/或内存管理。

引用C标准(重点是我的):

5.1.2.1独立环境

  1. 在独立环境中(可以在没有操作系统任何好处的情况下执行C程序), 程序启动时调用的函数的名称和类型是实现定义的 。 除了第4节要求的最小集合之外,任何独立程序可用的库设施都是实现定义的。

main() ,在独立环境中,是一个非常用户定义的函数。

它是必需的用户定义函数(可执行文件的入口点)……

它不是“内置”的任何语言,从某种意义上说,没有标准实现 – 为你main()avialable。

对于C / C ++ / Java,它是一个具有特殊属性的函数,即在完成所有静态设置后将在程序开始时调用的函数。 例如,整个C程序的执行路径是:

  1. 做一些初始化代码

  2. 呼叫main()

  3. 出口。

因此,它有一个标准声明(从命令行传递的参数数量+“字符串”数组 – 但是语言实现了 – 这是命令行的实际参数)

在C / C ++中,它是一个标准,因此它内置并重新组合。

Java,不确定,没有经验

C# – 它是一个类的一部分,所以它由你定义。

所有这些都是由你定义的 – 你告诉它该怎么做。

它是用户定义的函数,由语言的运行时库调用。 例如,C运行时库将从操作系统中获取命令行参数,有时还会获取环境变量,并将它们传递给main()函数。

不同的语言运行时通常以一种或另一种forms执行相同的操作,并且如果它尝试调用的函数不存在则会引发某种错误。

它的声明是内置的。 它的定义是用户提供的,或者在某些情况下由具有其他入口点的应用程序框架提供,或者在大多数事件驱动的GUI框架的情况下,没有单个用户定义的入口点。

在Java中,main(String [] args)是按惯例的应用程序的入口点(使C ++程序员感到舒服)。 对于applet或servlet,代码调用的方式不同。 请注意,jar可以包含任何这些入口点,也可以不包含任何入口点,并且每个类可以包含main,因此如果需要,可以以许多不同的方式调用给定的jar作为applcation。