【发布时间】:2010-12-05 02:14:31
【问题描述】:
C、C++、Java 或 C# 中的 main()(或 Main())是用户定义函数还是内置函数?
【问题讨论】:
C、C++、Java 或 C# 中的 main()(或 Main())是用户定义函数还是内置函数?
【问题讨论】:
这是程序执行所必需的用户定义函数。当您以编译语言运行程序时,将执行 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”被打印到控制台。
【讨论】:
public static void main(String[] args) 并且您无法更改它。
我不确定您所说的内置与用户定义是什么意思。几乎没有一种语言实际上赋予您的用户定义函数作为程序真正入口点的特权。 C++、任何 .NET 语言和 Java 都具有隐藏(内置)入口点方法,这些入口点方法反过来调用您的用户定义的 Main 方法(或该语言的任何入口点方法被调用 - 在 .NET 中,它可以被命名任何东西,尽管 C# 和 VB.NET 强制它被称为 Main)。
所以是的,几乎每一种语言都有一个自动调用的方法的概念,这个方法是用户定义的方法,通常是强制性的。但几乎每种语言都有一个内置的入口点方法,在调用用户定义的“入口点”函数之前,它实际上为进程设置了框架和/或内存管理。
【讨论】:
引用 C 标准(重点是我的):
5.1.2.1 独立环境
- 在独立的环境中(在 执行 C 程序可能需要哪些时间 没有任何好处的地方 操作系统),名称和 调用的函数的类型 程序启动是 实现定义。任何 图书馆设施可供 独立程序,除了 第 4 条要求的最小集合, 由实现定义。
main(),在独立环境中,很大程度上是一个用户定义的函数。
【讨论】:
这是一个必需的用户定义函数(可执行文件的入口点)...
【讨论】:
它不是任何语言的“内置”,从某种意义上说没有标准实现——main() 可用。
对于 C/C++/Java,它是一个具有特殊属性的函数,即在所有静态设置完成后,将在程序开始时调用的函数。例如。整个C程序的执行路径是:
做一些初始化代码
致电main()
退出。
因此,它有一个标准声明(从命令行传递的参数数量+“字符串”数组 - 但是语言实现了 - 这是来自命令行的实际参数)
【讨论】:
在 C/C++ 中,它是一个标准,因此它被内置并重新整合。
Java,不确定,没有经验
C# - 它是类的一部分,因此由您定义。
所有这些都是由你定义的——你告诉它要做什么。
【讨论】:
这是一个由语言的运行时库调用的用户定义函数。例如,C 运行时库将从操作系统中获取命令行参数,有时还会获取环境变量,并将它们传递给您的 main() 函数。
不同的语言运行时通常以一种或另一种形式执行相同的操作,如果它尝试调用的函数不存在,则会抛出某种错误。
【讨论】:
它的声明是内置的。它的定义是用户提供的,或者在某些情况下由具有其他入口点的应用程序框架提供,或者在大多数事件驱动的 GUI 框架的情况下,没有单个用户定义的入口点。
【讨论】:
在 Java 中,main(String[] args) 按照惯例是应用程序的入口点(使 C++ 程序员感到舒适)。对于 applet 或 servlet,代码的调用发生方式不同。请注意,一个 jar 可能包含这些入口点中的任何一个或不包含这些入口点,并且每个类都可能包含一个 main,因此如果需要,可以以多种不同的方式调用给定的 jar 作为应用程序。
【讨论】: