C中main函数如何知道void函数执行成功?

问题描述 投票:0回答:1

在这个简单的 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
函数被执行了?

c return return-value
1个回答
0
投票

任何代码都只是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
  1. .LC0
    部分中定义了您的字符串常量。
  2. hello
    部分中,它调用
    puts
    函数,该函数由 GCC 优化,因为没有进行格式化。
  3. main
    部分中,执行对
    hello
    的调用,并且在该指令集完成后,使程序以
    0
    的形式存在,如汇编中所写:
        mov     eax, 0
        pop     rbp
        ret
© www.soinside.com 2019 - 2024. All rights reserved.