【问题标题】:C main vs Java mainC 主要与 Java 主要
【发布时间】:2011-05-23 05:47:23
【问题描述】:

C主函数和Java主函数有什么区别?

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

public static void main(String [] args)

这些主要功能与每种语言的创建有何关系?每种语言的好处或结果是什么?

【问题讨论】:

  • 你不明白他们中的一个(或两个)是做什么的吗?
  • 不是不懂。它是“这些主要功能与每种语言的创建有何关系,每种语言的好处或结果是什么?”

标签: java c


【解决方案1】:

它们做同样的事情——它们都旨在成为您程序的入口点。

签名的不同之处在于 Java 支持“知道”其长度的数组,而 C 不支持。这就是为什么你需要argc,它是传递的参数数量的计数。

在 C 语言中,您可以使用 return 关键字以及整数值向 shell 返回成功或失败代码。在 Java 中,您可以通过使用返回码调用 System.Exit(code) 来实现。做同一件事的两种不同方式。

这个人有quite the write-up这个话题!

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • +1 Java 二进制文件(类文件,可能在 jar 中)的集合可能包含多个 main 方法,并且它只是指示它的 JavaVM 的参数关于如何找到合适的开始。其中 C/C++ 程序是具有单个定义入口点的编译可执行文件,并且每个备用入口点都需要一个新的编译可执行文件。
    猜你喜欢
    • 2012-11-18
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    • 2020-07-11
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    相关资源
    最近更新 更多