函數(shù)返回值而沒(méi)有return語(yǔ)句為什么下面的代碼輸出正確?int GGT沒(méi)有return語(yǔ)句,但代碼確實(shí)有用嗎?沒(méi)有設(shè)置全局變量。#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 回答

慕無(wú)忌1623718
TA貢獻(xiàn)1744條經(jīng)驗(yàn) 獲得超4個(gè)贊
至少對(duì)于x86,此函數(shù)的返回值應(yīng)該在eax
寄存器中。那里的任何東西都會(huì)被調(diào)用者視為返回值。
因?yàn)?code>eax它被用作返回寄存器,所以它通常被callee用作“scratch”寄存器,因?yàn)樗恍枰A?。這意味著它很可能被用作任何局部變量。因?yàn)樗鼈儍烧咴谧詈笫窍嗟鹊?,所以更可能保留正確的值eax
。

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