【发布时间】:2014-03-18 16:49:06
【问题描述】:
在我的编程书中,它显示我在没有任何参数的情况下使用了退出 (exit();)。
不幸的是,它不起作用。
有人说使用exit(0);,有人说exit(1); exit(2);和exit(3);
它们之间有什么区别,甚至还有exit(4); 吗?
有趣的是,我的编译器不需要stdlib.h 来执行exit(0); 和其余部分。
【问题讨论】:
-
参见:stackoverflow.com/questions/1101957/… 不是完全重复...但非常接近。
-
您的编译器不执行函数
exit。它只是将对exit(0)的调用编译为一些操作码,用于将0推入堆栈,然后在您的代码部分中跳转(更改指令指针)到函数exit的地址可执行映像。由于在编译期间该函数的地址是未知的,因此链接器将符号exit替换为实际地址。所以总结一下 - 编译器用二进制代码替换exit(0)以跳转到一个函数,链接器用函数的地址更新该二进制代码。