命令行参数是否会被传递两次"?

时间:2017-09-05 18:11:04

标签: c linux x86

我试图了解命令行参数的工作原理。

这就是我认为发生的事情:

  • 在C中编译包含main()函数的源代码时,生成的目标文件将与CRT链接,程序的入口点将为_start()功能(存在于CRT中),_start()将调用main()

  • 现在,当您运行程序并传递一些命令行参数时,命令行参数将传递给_start()函数,然后_start()将重新传递命令行main()的参数。

我说错了吗?

1 个答案:

答案 0 :(得分:4)

  

我说错了吗?

是和否:

_start()函数不是C函数,而是汇编函数。原因是CPU不处于"状态"这是C程序所要求的,因此_start()函数还必须设置CPU来执行C代码。

"州与#34;之间的一个区别C程序和"状态"所要求的调用_start()时的CPU是存储参数(这里:命令行参数)的方式。

在Linux下(至少32位 - 我不知道64位)你实际上有一个数组,后来代表argv_start()必须计算argv的位置,然后将计算出的值传递给main()

在Windows下,有一个函数将整个命令行作为指向单个字符串(const char *)的指针返回! _start()函数必须调用该函数,然后将字符串拆分为稍后成为argv的部分...