如果 main() 不返回 int 值会发生什么?

2024-01-10

我知道在 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相反。)如果你有问题mainvoid,那么它不会在预期的寄存器中存储任何内容,因此调用者将获得先前存储在该寄存器中的任何值。

If your main返回某种类型,它希望存储在调用者没有为其保留内存的地方(例如大型结构),那么它最终会覆盖其他东西,也许是对程序的干净关闭很重要的东西,导致你的程序坠毁。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果 main() 不返回 int 值会发生什么? 的相关文章

随机推荐