![Linux系统编程](https://wfqqreader-1252317822.image.myqcloud.com/cover/388/47491388/b_47491388.jpg)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
2.3.2 实践步骤
我们将编写两个不同版本的程序,以展示两种不同的程序退出方法。
1.首先,我们使用return语句编写第一个版本的程序,该方式在前面的内容中已经进行过展示。但是这一次,我们将在函数中使用return返回,一直返回到main(),最终返回到父进程,也就是shell。将下面的程序保存到一个名为functions_ver1.c的文件中。下面的代码中,所有的return语句已被突出显示:
![](https://epubservercos.yuewen.com/E885F0/26886940202812006/epubprivate/OEBPS/Images/43_03.jpg?sign=1739330072-UDU006n5r8pxJUIXtFcYi4BcFQJ7d1NE-0-20343d780d2c807ceb15062675bb7ac6)
![](https://epubservercos.yuewen.com/E885F0/26886940202812006/epubprivate/OEBPS/Images/44_01.jpg?sign=1739330072-nQS8Zobo7hn74QYgFcgpJfyvJzRrmFGz-0-7f93d56326461e518eeab8537123ed7f)
2.编译程序:
![](https://epubservercos.yuewen.com/E885F0/26886940202812006/epubprivate/OEBPS/Images/44_02.jpg?sign=1739330072-2EK2RyUtfcFit5T6VV3ZCfxAkVSdDG4c-0-4ace13efce2f5e1d20df9f46c11d5ad9)
3.运行程序。尝试跟踪整个过程,查看哪些函数被调用了并返回到了其他哪些函数:
![](https://epubservercos.yuewen.com/E885F0/26886940202812006/epubprivate/OEBPS/Images/44_03.jpg?sign=1739330072-YsVydZrLNBAiPpC13EpX3zQ4jsFcVIaQ-0-56596505e4f075e90b548b8702f88d76)
![](https://epubservercos.yuewen.com/E885F0/26886940202812006/epubprivate/OEBPS/Images/45_01.jpg?sign=1739330072-VqQ64FTbu4bGMnq32JI9ib9C5L4D4LT6-0-da239c6db951f6010fbd41ebe9251bca)
4.检查程序的返回值:
![](https://epubservercos.yuewen.com/E885F0/26886940202812006/epubprivate/OEBPS/Images/45_02.jpg?sign=1739330072-Wp4Elzo2AMXPmgK7SFiO0I240pTZnFOR-0-5995703e6c20f1045defc721dc7a37d1)
5.现在,我们重写前面的程序,改为在函数内部使用exit()。一旦exit()被调用,程序将以指定的值退出。如果在另一个函数中调用了exit(),该函数将不会返回到main()。将下面的程序保存到一个新文件中,并将文件命名为functions_ver2.c。在以下代码中,所有的return语句和exit语句已被突出显示:
![](https://epubservercos.yuewen.com/E885F0/26886940202812006/epubprivate/OEBPS/Images/45_03.jpg?sign=1739330072-2HU66eYpRKWHMmHCtt6artPeqk0fjH3C-0-98aa015c66918a80ddb6830f58035039)
![](https://epubservercos.yuewen.com/E885F0/26886940202812006/epubprivate/OEBPS/Images/46_01.jpg?sign=1739330072-I59ph20bHAEML4wRU6dFr7Gmcfd1pmAv-0-bcc7d71b1216d3a36222a6565164a2ec)
6.编译这个版本:
![](https://epubservercos.yuewen.com/E885F0/26886940202812006/epubprivate/OEBPS/Images/46_02.jpg?sign=1739330072-Idhoax3wpoHgAXpYcaTfi0jYH7K4Gos5-0-58cd1a0816416fe3369050b430827132)
7.运行该程序,看看会发生什么(并和上一个程序的输出进行比较):
![](https://epubservercos.yuewen.com/E885F0/26886940202812006/epubprivate/OEBPS/Images/46_03.jpg?sign=1739330072-d8xSagIn9RtPMJYA6qVkrqDRMxoZGJ9c-0-0d43bc61f9f2af27a0b1a39bb49a33ad)
8.检查程序的返回值:
![](https://epubservercos.yuewen.com/E885F0/26886940202812006/epubprivate/OEBPS/Images/46_04.jpg?sign=1739330072-Wo0wylxbLHzygdUz7lYgATy0qXSQ211h-0-fa597517ae3e23cb4470a752455376be)