为什么名称main为函数main()

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为什么它是主要的而不是别的东西.

  • 好奇的是它不是`enter()`,那么,作为`exit()`的反义词. (4认同)
  • 也许这是编写PDP-8汇编语言时使用的惯例.有关使用MAIN作为入口点的Hello World程序,请参见http://en.wikipedia.org/wiki/PDP-8. (2认同)

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

  • +1任何真实内容的极少数答案之一. (2认同)
  • 写C时gcc不存在. (2认同)

Pau*_*lin 10

因为C做到了,所以C++保持它兼容,而Java则是为了简化从C++的过渡.早在Java的早期,雇主经常聘请具有C++经验的人,因为它非常相似.不像今天他们希望新人拥有比Gosling更多的Java经验.

并且不要忘记PL/1为了相同的目的使用了"程序选项主".(伙计,那令人耳目一新的记忆细胞一段时间没有被触及!)

  • 我怀疑归结为"他们必须使用某些东西"和"主要听起来不错". (2认同)
  • @BalusC:这将是一个难以回答的问题(除了"这就是B中的内容")."为什么"关于任意决定的问题本身并不重要(例如,在美国,我们在正确的情况下开车并不重要,只有我们都在一方开车)并不是很有成效. (2认同)

ros*_*oft 9

您如何命名程序的主要功能?

  • `superAwesomeStartingPoint(final String [] args)`在Java中似乎喜欢蛮横长名的精神.`main`似乎在Java中不合适. (30认同)
  • 微软的变种:my_entry(),my_start(),my_execute(),my_run()和my_go() (10认同)
  • @Bogdan:他们可能会被称为EntryEx(),StartEx(),ExecuteEx(),RunEx(),GoEx().我不记得任何带有my_*命名约定的Microsoft API. (10认同)
  • entry(),start(),execute(),run(),go(),___(),$(),application(),... (3认同)

Chr*_*ore 8

或者,为了更加迟钝,我们为什么要在路边开车呢?

答:我们必须选择一些东西.

  • 实际上我认为这与绘制剑有关,大多数人都是右手......每个人都习惯在左边走路/骑行,但后来拿破仑改变了它,使得在街头打架变得更加困难.至少那是我听到的故事......我确信斯诺普斯有一个观点. (2认同)

Chr*_*ore 6

它并不总是main().

Java Applet使用init()和start()来挂接外部调用者.

Servlet通过init()和service()方法启动.

(服务将调度到更熟悉的doGet和doPost方法)

当然,这些异常确实依赖于操作系统以外的某些容器来调用方法.


小智 2

语言设计者必须选择“某个”名称,并且 main() 听起来像 Main 函数,因为那是执行开始的地方:)