4.3.1 函数的嵌套调用
前面讲过,C 语言中函数是不能嵌套定义的,但函数是可以嵌套调用的。所谓函数的嵌套调用,就是在一个函数的函数体中又出现了函数调用语句。简单说,就是函数又调用了函数。其实前面所有的案例都使用了函数的嵌套调用,包括第一个 C 语言程序(在主函数中又调用了 printf 函数),虽然这两个函数有点特殊,一个是主函数,一个是库函数。
下面就用自定义函数来展示一下函数的嵌套调用,并从中厘清函数嵌套调用时程序的执行流程。
首先定义一个函数 A,在函数体中使用两条 printf 函数分别打印开始和结束函数 A 的提示信息。
再定义一个函数 B,同样在函数体中使用 printf 函数分别打印开始和结束函数 B 的提示信息,在两条 printf 函数调用语句之间再加入一条对函数 A 的调用语句。
最后在主函数中,也是使用 printf 函数分别打印开始和结束主函数的提示信息,在两条 printf 函数调用语句之间再加入一条对函数 B 的调用语句。
保存源文件,编译生成可执行文件,执行后运行结果如下:
Start main function. Start function B. Start function A. End function A. End function B. End main function.
从打印输出的结果,可以清晰看出程序的执行流程:程序运行后,程序的执行流程首先执行主函数,在函数体中的第一条语句是 printf 函数调用语句,它会在窗口上打印输出“Start main function.”,第二条语句是函数 B 调用语句,这会让程序的执行流程转到函数 B 中,在函数 B 的函数体中,首先通过 printf 函数调用语句,在窗口上打印输出“Start function B.”,然后又执行了对函数 A 调用的语句,此时程序流程又会转到函数 A 中,在函数 A 的函数体中,通过两条 printf 函数调用语句分别打印“Start function A.”和“End function A.”,这时函数 A 执行完毕,程序流程回退到当初调用函数 A 的地方,即函数 B 中的第二条语句,然后接着向下执行,通过 printf 函数调用语句打印输出“End function B.”,这时函数 B 也执行完毕,程序流程再次回退到当初调用函数 B 的地方,即主函数中的第二条语句,接着向下执行,通过 printf 函数调用语句打印输出“End main function.”。最后通过 return 语句返回一个 0 给系统,结束整个程序。
如图 4.5 所示,虚线箭头指示程序的实际执行流程。
图 4.5 程序执行流程箭头指示图
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论