C语言中main函数如何知晓调用的void函数已成功执行?
为什么main函数能知晓被调用的void函数已执行完成?
以下是一个简单的C语言程序:
#include <stdio.h> void hello() { printf("hey i am from void function\n"); } int main() { hello(); return 0; }
输出:
hey i am from void function
当hello函数成功执行后,控制权回到main函数,程序终止。
问题解答
这和函数调用的底层执行机制有关,和函数是否是void类型没有直接关系:
- 当main函数调用
hello()时,CPU会先把当前执行的位置(返回地址)保存到栈中,然后跳转到hello函数的代码入口开始执行。 - 当
hello函数执行到末尾的}时,会触发函数返回操作:CPU从栈中取出之前保存的返回地址,跳回到main函数中调用hello()的下一行代码继续执行。 void关键字只是表示这个函数不返回任何数据值,但函数调用的返回流程(控制权交还)是完全存在的,所以main函数会自然地在hello函数执行完后恢复执行,这是CPU指令集和程序调用约定决定的默认行为,不需要额外的“知晓”逻辑。
内容的提问来源于stack exchange,提问作者ASWIN
相关产品推荐
相关产品推荐

