在这个简单的 C 程序中
#include <stdio.h>
void hello() {
printf("hey i am from void function\n");
}
int main() {
hello();
return 0;
}
输出:
hey i am void function
成功执行
hello
函数后,控制返回主函数,程序终止..
main
函数如何知道被调用的void
函数被执行了?
任何代码都只是CPU的一组有效指令,没有别的,
main()
函数不知道任何东西,它只是执行hello
函数中提到的指令,然后执行您接下来编写的指令,即return 0
.
您的
void
函数不必告诉 main()
函数,当其指令集完成时,它会自动返回。
pop rbp
ret
这是 GCC 程序的汇编输出 (
-Masm=intel
):
.LC0:
.string "hey i am from void function"
hello:
push rbp
mov rbp, rsp
mov edi, OFFSET FLAT:.LC0
call puts
nop
pop rbp
ret
main:
push rbp
mov rbp, rsp
mov eax, 0
call hello
mov eax, 0
pop rbp
ret
.LC0
部分中定义了您的字符串常量。hello
部分中,它调用 puts
函数,该函数由 GCC 优化,因为没有进行格式化。main
部分中,执行对 hello
的调用,并且在该指令集完成后,使程序以 0
的形式存在,如汇编中所写: mov eax, 0
pop rbp
ret