为了账号安全,请及时绑定邮箱和手机立即绑定

函数返回值而没有return语句

函数返回值而没有return语句

C
小唯快跑啊 2019-08-28 14:53:28
函数返回值而没有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;         }     }}
查看完整描述

3 回答

?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

至少对于x86,此函数的返回值应该在eax寄存器中。那里的任何东西都会被调用者视为返回值。

因为eax它被用作返回寄存器,所以它通常被callee用作“scratch”寄存器,因为它不需要保留。这意味着它很可能被用作任何局部变量。因为它们两者在最后是相等的,所以更可能保留正确的值eax


查看完整回答
反对 回复 2019-08-28
?
呼唤远方

TA贡献1856条经验 获得超11个赞

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


查看完整回答
反对 回复 2019-08-28
  • 3 回答
  • 0 关注
  • 650 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信