C的main函数和Java的main函数有什么区别?
int main( int argc, const char* argv[] )
vs
public static void main(String [] args)
这些主要功能与每种语言的创建有何关系?每种功能的好处或结果是什么?
发布于 2010-12-10 09:55:50
C中的入口点( main函数)由C++编译器工具链中的链接器使用,以便在指定了可执行目标的情况下运行可执行文件(否则该函数将被忽略)。这个入口点是可执行规范的一部分,并且是非常静态的。它依赖于机器代码位于特定的、具体的内存地址。想象一下,我们将args数组指针和args计数放在内存中的堆栈上,该堆栈是在操作系统运行可执行文件时设置的,然后运行机器代码。此外,C函数有一个int返回类型,用于向shell返回失败或成功(通常为EXIT_SUCCESS (通常为0)或EXIT_FAILURE)。
Java ( main方法)中的入口点是动态的,因为Java本身是一种解释的JIT语言,并且依赖于类路径中具有此方法的类,并在执行'java‘命令时指定。在查找main方法在字节码中的位置,然后通过字节码解释器运行内容时,需要进行一些处理。args数组也进入堆栈供方法体使用,但还有更多的设置,因为它是一个数组对象--我们让它在通过JNI或类似的方法启动后转换它。Java在main方法中没有返回类型,但可以抛出未检查的异常来指示失败(可能)。
发布于 2010-12-10 09:50:40
它们做同样的事情--它们都是程序的入口点。
签名的不同之处在于,Java支持“知道”它们的长度的数组,而C不支持。这就是您需要argc
的原因,它是传递的参数数量的计数。
在C中,通过使用return
关键字以及整数值将成功或失败代码返回给shell。在Java语言中,您可以通过使用返回代码调用System.Exit(代码)来完成此操作。做同一件事的两种不同方式。
这家伙有关于这个话题的quite the write-up!
https://stackoverflow.com/questions/4404948
复制相似问题