函數(shù)返回值而沒有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條經(jīng)驗 獲得超4個贊
至少對于x86,此函數(shù)的返回值應該在eax
寄存器中。那里的任何東西都會被調(diào)用者視為返回值。
因為eax
它被用作返回寄存器,所以它通常被callee用作“scratch”寄存器,因為它不需要保留。這意味著它很可能被用作任何局部變量。因為它們兩者在最后是相等的,所以更可能保留正確的值eax
。

呼喚遠方
TA貢獻1856條經(jīng)驗 獲得超11個贊
在x86上,返回值存儲在EAX寄存器中,此編譯器也“意外地”使用它來存儲算術運算的結(jié)果(或至少減法)。您可以通過查看編譯器生成的程序集來檢查這一點。我同意kriss - 你不能認為這種情況總是如此,所以最好明確指定返回值。
- 3 回答
- 0 關注
- 680 瀏覽
添加回答
舉報
0/150
提交
取消