Net*_*hra 8 c java program-entry-point
为什么函数名main()保留在许多语言中,如C,C++,Java?为什么没有该功能的任何其他名称?所有这三个main()是否有任何共同的结构(在C,C++,Java中)
Tim*_*man 32
对于一个合理的问题,这里有很多愚蠢而不是很尊重的答案.
C并非来自任何地方.它的直接祖先是B,由Ken Thompson编写.这是B手册的链接.B程序的基本结构是
主要(); 出口();
main()由程序员提供,exit()由库提供.这似乎是main()的第一次出现,因为B的前身BCPL没有这样的概念.我猜你肯定要问Ken Thompson为什么它是主要的而不是别的东西.
Mar*_*off 26
另请注意,虽然名称main
是各种约定,但您可以根据需要为输入函数命名,只要您告诉链接器入口点实际上是什么.请参阅以下代码段man ld
:
-e entry --entry=entry Use entry as the explicit symbol for beginning execution of your program, rather than the default entry point. If there is no sym- bol named entry, the linker will try to parse entry as a number, and use that as the entry address (the number will be interpreted in base 10; you may use a leading 0x for base 16, or a leading 0 for base 8).
此外,FWIW,入口点ld
的第一选择是(有时)实际调用的函数_start
(但我认为它实际上是一个依赖于平台的值).
而看到此邮件后还增加了一个多一点解释ld
的-e
选项:
-e
给予替代_start
,而不是main()
.您必须知道系统运行时如何将参数传递给程序并复制crt [01in] .o和crt {begin,end} .o的一些功能以调用main.
我找不到它在gcc手册页中记录的位置,但你也可以传递-e
给gcc来指定入口点; 然而,当你解决C的魔力时,它最终会成为一项相当复杂的任务main
.
$ cat junk.c int junk() { return 8; } $ gcc -nostdlib -e _junk junk.c -o junk && (./junk; echo $?) 8
Pau*_*lin 10
因为C做到了,所以C++保持它兼容,而Java则是为了简化从C++的过渡.早在Java的早期,雇主经常聘请具有C++经验的人,因为它非常相似.不像今天他们希望新人拥有比Gosling更多的Java经验.
并且不要忘记PL/1为了相同的目的使用了"程序选项主".(伙计,那令人耳目一新的记忆细胞一段时间没有被触及!)
您如何命名程序的主要功能?
或者,为了更加迟钝,我们为什么要在路边开车呢?
答:我们必须选择一些东西.
它并不总是main().
Java Applet使用init()和start()来挂接外部调用者.
Servlet通过init()和service()方法启动.
(服务将调度到更熟悉的doGet和doPost方法)
当然,这些异常确实依赖于操作系统以外的某些容器来调用方法.