5 回答

TA貢獻(xiàn)883條經(jīng)驗(yàn) 獲得超454個(gè)贊
一句話總結(jié):歪打正著而已。
你這樣寫(xiě)肯定是不對(duì)的! ?
如果函數(shù)聲明了有返回值,那就一定要在每一個(gè)返回分支處都return相應(yīng)的返回值,否則返回的值是未定義的。
這就是C標(biāo)準(zhǔn)中所謂的“未定義”行為。 返回什么都有可能。
而且這樣的代碼在編譯時(shí),編譯器會(huì)發(fā)現(xiàn)在有的返回分支處你沒(méi)有return返回值,會(huì)給出警告的。
至于為什么好像返回值也是正確的。 ?這一般與編譯器的實(shí)現(xiàn)有關(guān)。 比如:gcc一般會(huì)用eax寄存器來(lái)返回這樣的值,而這種簡(jiǎn)單的代碼,gcc有可能將sum就儲(chǔ)存在eax中,所以結(jié)果就恰好正確了。 (這也只是一種推測(cè),具體行為是不是這樣,只能看編譯后的匯編代碼了)
關(guān)鍵是:絕對(duì)不要以為這樣寫(xiě)代碼也是可以的!?這樣的代碼就是錯(cuò)誤的??! ?只不過(guò)碰巧返回了看似正確的值。

TA貢獻(xiàn)55條經(jīng)驗(yàn) 獲得超12個(gè)贊
這得看c的函數(shù) 是不是默認(rèn)返回,例如js會(huì)默認(rèn)返回undefined一樣。要么編譯通不過(guò),要么就是默認(rèn)。你可以這個(gè)思路入手。

TA貢獻(xiàn)143條經(jīng)驗(yàn) 獲得超94個(gè)贊
我覺(jué)得應(yīng)該與編譯器有關(guān)。函數(shù)返回定義為int那么調(diào)用處應(yīng)該會(huì)接受到一個(gè)int數(shù)據(jù),只是不知道具體是什么了。

TA貢獻(xiàn)51條經(jīng)驗(yàn) 獲得超16個(gè)贊
因?yàn)樵谀愕暮瘮?shù)里就有輸出語(yǔ)句啊,不過(guò)return沒(méi)用吧……
- 5 回答
- 1 關(guān)注
- 1996 瀏覽
添加回答
舉報(bào)