我知道在 C 编译器中main()
函数被调用_start()
函数的代码如下:
exit(main()); // return value of main is returned
如何_start()
工作时main()
不返回int
,例如如果它的返回类型是void
, float
, 或者是其他东西?
If main
不回来int
,那么你的程序格式不正确,并且行为未定义。任何事情都可能发生。您的程序可能会崩溃,或者可能会运行得好像根本没有问题一样。
我们假设main
返回了除int
,并且您的编译器和链接器允许制作该程序。但调用者并不知道这一点。如果调用者期望返回int
要在 EAX (Intel) 寄存器中返回的值,那么它将读取以确定返回值main
。如果你的故障main
存储了一个float
值,那么它将被解释为int
反而。 (这并不意味着它会被截断。这意味着构成浮点值布局的位将改为构成int
相反。)如果你有问题main
回void
,那么它不会在预期的寄存器中存储任何内容,因此调用者将获得先前存储在该寄存器中的任何值。
If your main
返回某种类型,它希望存储在调用者没有为其保留内存的地方(例如大型结构),那么它最终会覆盖其他东西,也许是对程序的干净关闭很重要的东西,导致你的程序坠毁。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)