我试图了解命令行参数的工作原理。
这就是我认为发生的事情:
在C中编译包含main()
函数的源代码时,生成的目标文件将与CRT链接,程序的入口点将为_start()
功能(存在于CRT中),_start()
将调用main()
。
现在,当您运行程序并传递一些命令行参数时,命令行参数将传递给_start()
函数,然后_start()
将重新传递命令行main()
的参数。
我说错了吗?
答案 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
的部分...