2012-02-04 56 views

回答

5

当你要求你的操作系统运行一个文件时,它会将它加载到内存中,然后跳转到起始点(_start等)。此时,有一个代码,调用main然后退出(链接器对此部分负责)。如果您不使用main函数编写程序,链接程序会给您一个错误,因为它找不到它。

0

你的程序(这是一系列函数内部捆绑的代码)必须要有一个起点吗?

必须首先调用某些东西才能运行其余的东西。

所以,这出发点是main,这是由父进程在你的O叫/ S(曾经那是什么),让你的程序运行

+0

嗯,我知道,但是当我写 '$。/ a.out' 我正在运行哪个程序? – Vikram 2012-02-04 22:05:23

+0

你分叉一个调用main的进程(这是一个ELF文件) – Cratylus 2012-02-04 22:07:36

7

main函数被调用,在实践中,由C运行时。

你可以编写一个没有main的程序,但它的必须有有一个入口点。不同的操作系统允许您为程序指定不同的入口点,但它们的用途与main相同。在Windows上,您可以使用WinMain。在Linux上,你可以在没有CRT的情况下连接并定义你自己的_start功能(但它不能返回!)

没有入口点的程序就像一辆没有车轮的车:它不会去任何地方。

+0

是不是另一种方式?程序调用并链接到C运行时? – Cratylus 2012-02-04 22:06:29

+0

更像是一辆没有起动引擎的汽车,汽车在那里,它可以做它应有的一切,但没有什么能够启动这个过程 – whitelionV 2012-02-04 22:09:49

+0

1)你是什么意思的C运行时? 2)你的意思是如果我写一个C程序完全在我的操作系统中执行....我不能在不同的操作系统上运行它,因为不同的操作系统有不同的入口点? – Vikram 2012-02-04 22:12:44

0

最简单的答案是:程序的用户在启动应用程序时调用主函数。你有没有使用过命令终端?如果你有你会知道你可以传递参数给一个命令。例如:

$ grep word myfile 

什么在幕后事情是终端看什么键入然后调用grep程序的main方法,并传递[word, myfile]作为第二个参数,以这种方法。这是一个简化,但我希望它有帮助。