函数返回值而没有return语句

函数返回值而没有return语句

为什么下面的代码输出正确?int GGT没有return语句,但代码确实有用吗?没有设置全局变量。

#include <stdio.h>#include <stdlib.h>int GGT(int, int);void main() {
    int x1, x2;
    printf("Bitte geben Sie zwei Zahlen ein: \n");
    scanf("%d", &x1);
    scanf("%d", &x2);
    printf("GGT ist: %d\n", GGT(x1, x2));
    system("Pause");}int GGT(int x1, int x2) {
    while(x1 != x2) {
        if(x1 > x2) {
            /*return*/ x1 = x1 - x2;
        }
        else {
            /*return*/ x2 = x2 - x1;
        }
    }}


小唯快跑啊
浏览 651回答 3
3回答

慕无忌1623718

至少对于x86,此函数的返回值应该在eax寄存器中。那里的任何东西都会被调用者视为返回值。因为eax它被用作返回寄存器,所以它通常被callee用作“scratch”寄存器,因为它不需要保留。这意味着它很可能被用作任何局部变量。因为它们两者在最后是相等的,所以更可能保留正确的值eax。

呼唤远方

在x86上,返回值存储在EAX寄存器中,此编译器也“意外地”使用它来存储算术运算的结果(或至少减法)。您可以通过查看编译器生成的程序集来检查这一点。我同意kriss - 你不能认为这种情况总是如此,所以最好明确指定返回值。
打开App,查看更多内容
随时随地看视频慕课网APP