6

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

4

9 回答 9

13

它是程序执行所必需的用户定义函数。当你用编译语言运行你的程序时,main函数就是被执行的。例如,在 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”被打印到控制台。

于 2009-10-08T17:47:07.010 回答
5

我不确定您所说的内置与用户定义是什么意思。几乎没有一种语言实际上赋予您的用户定义函数作为程序真正入口点的特权。C++、任何 .NET 语言和 Java 都具有隐藏(内置)入口点方法,这些入口点方法反过来调用您的用户定义的 Main 方法(或该语言的任何入口点方法被调用 - 在 .NET 中,它可以被命名任何东西,尽管 C# 和 VB.NET 强制它被称为 Main)。

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

于 2009-10-08T18:00:07.170 回答
4

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

5.1.2.1 独立环境

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

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

于 2009-10-08T19:26:56.653 回答
3

这是一个必需的用户定义函数(可执行文件的入口点)......

于 2009-10-08T17:43:35.940 回答
3

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

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

  1. 做一些初始化代码

  2. 称呼main()

  3. 出口。

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

于 2009-10-08T17:51:15.083 回答
0

在 C/C++ 中,它是一个标准,因此它是内置的并经过重新调整。

Java,不确定,没有经验

C# - 它是类的一部分,因此由您定义。

所有这些都是由你定义的——你告诉它要做什么。

于 2009-10-08T17:41:56.460 回答
0

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

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

于 2009-10-08T17:57:21.187 回答
0

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

于 2009-10-08T18:55:37.713 回答
0

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

于 2009-10-08T20:20:33.923 回答