函数返回值而没有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
。
呼唤远方
TA贡献1856条经验 获得超11个赞
在x86上,返回值存储在EAX寄存器中,此编译器也“意外地”使用它来存储算术运算的结果(或至少减法)。您可以通过查看编译器生成的程序集来检查这一点。我同意kriss - 你不能认为这种情况总是如此,所以最好明确指定返回值。
- 3 回答
- 0 关注
- 650 浏览
添加回答
举报
0/150
提交
取消