[問題] 沒return為何function會回傳值?

看板C_and_CPP作者 ( )時間11年前發表 (2014/06/15 14:02), 11年前編輯推噓5(5014)
留言19則, 10人參與, 最新討論串1/1
使用 DevC++ 輸入1234 得到1+2+3+4 #include <iostream> #include <cstdlib> using namespace std; int Test(int); int main() { int a; cout <<"Enter your number: "; cin >>a; cout <<"Answer is "<<Test(a)<<endl; system("Pause"); return 0; } int Test(int b) { int sum; if (b/10 >=1) { int c = b%10; sum = c+Test(b/10); } else return b; //return sum; } 我是用遞迴寫,用餘數的方式去各別取輸入的值 問題是,我在function裡並沒有實際回傳最後總和值sum 可是程式卻可正常執行無任何警告錯誤? 當然我最後加上 return sum; 程式也是正常的 為何會這樣呢? 謝謝各位! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.134.45.104 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1402840934.A.C63.html ※ 編輯: bizza (220.134.45.104), 06/15/2014 22:03:05

06/15 22:19, , 1F
你試試看 sum = 那行後面加上其他程式碼實驗看看
06/15 22:19, 1F

06/15 22:20, , 2F
像是隨便 printf("hello");
06/15 22:20, 2F

06/15 22:30, , 3F
這是undefined behavior (6.6.3p2)
06/15 22:30, 3F

06/15 22:41, , 4F
我在sum=後面那行隨便加了一個output 答案就錯了@@
06/15 22:41, 4F

06/15 23:01, , 5F
對初學者只要知道是三樓那樣就好了 (所謂的未定義行為)
06/15 23:01, 5F

06/15 23:01, , 6F
不需要去探究為什麼它會正好是對的結果
06/15 23:01, 6F

06/15 23:27, , 7F
換新一點的編譯器 應該會有warning吧?
06/15 23:27, 7F

06/16 01:34, , 8F
我想編譯器最後是處理加法,使用到 eax 儲存 sum
06/16 01:34, 8F

06/16 01:35, , 9F
剛好回傳值也是讀 eax 暫存器,所以答案會對
06/16 01:35, 9F

06/16 08:32, , 10F
overflow?
06/16 08:32, 10F

06/16 09:32, , 11F
我記得會有novoid function reach...的warning
06/16 09:32, 11F

06/16 12:51, , 12F
語言都已經提供抽象化了,為什麼還是有人愛用特定編
06/16 12:51, 12F

06/16 12:51, , 13F
譯器實作反過來解釋呢?暫存器那位
06/16 12:51, 13F

06/16 20:02, , 14F
原 PO 問什麼在 "這個狀況" 下會剛好對,就猜測可能原
06/16 20:02, 14F

06/16 20:03, , 15F
因啊。
06/16 20:03, 15F

06/16 20:04, , 16F
如果問 "這樣寫可能有問題, 怎麼改比較好?" 就會給建議
06/16 20:04, 16F

06/16 23:21, , 17F
這情況是uninitial memory read,可以正常執行,但是回傳值
06/16 23:21, 17F

06/16 23:21, , 18F
未知。
06/16 23:21, 18F

07/04 10:12, , 19F
沒寫return通常是傳0或是傳eax吧
07/04 10:12, 19F
文章代碼(AID): #1JdQTcnZ (C_and_CPP)