2010-12-10 76 views
4

C main函数和Java main函数有什么区别?C main vs Java main

int main(int argc, const char* argv[]) 

VS

public static void main(String [] args) 

如何将这些主要功能有关联的语言创作和各有什么好处或结果?

+2

你不明白他们中的一个(或两个)是干什么的? – 2010-12-10 01:53:40

+0

它不是无法理解。它是“这些主要功能如何与每种语言创建相关联,每种语言的优点或结果如何?” – jarryd 2010-12-10 12:22:09

回答

7

当指定可执行目标(否则该函数被忽略)时,在C++编译器工具链中的链接器使用C(主函数)中的入口点来运行可执行文件时运行。这个入口点是可执行规范的一部分,并且非常静态。它依赖于机器码处于特定的具体存储器地址。想象一下,我们将args数组指针和args计数放在内存中的堆栈上,当操作系统运行可执行程序时将设置内存,然后运行机器代码。另外,C函数有一个int返回类型,用于向shell返回失败或成功(通常为EXIT_SUCCESS(通常为0)或EXIT_FAILURE)。

Java中的入口点(主要方法)是动态的,因为Java本身是一种解释的JIT语言,并且依赖于此类中的类在类路径上,并且在执行'java'命令时指定。有一些处理涉及查找主方法驻留在字节码中的位置,然后通过字节码解释器运行内容。 args数组也会进入堆栈以供方法体使用,但除此之外,还有更多的设置,因为它是一个数组对象 - 我们已经在kickstarting之后通过JNI等将它转换。 Java在主方法中没有返回类型,但可以抛出未经检查的异常来指示失败(可能)。

11

他们做同样的事情 - 他们都打算成为你的程序的切入点。

签名的区别是因为Java支持'知道'它们长度的数组,而C不支持。这就是为什么你需要argc,这是传递参数的数量。

在C中,通过使用return关键字以及整数值,将成功或失败代码返回到shell。在Java中,您可以通过使用返回码调用System.Exit(code)来完成它。做同样事情的两种不同方式。

这家伙有quite the write-up的话题!