作者pppty (無)
看板C_and_CPP
標題[問題] C語言return問題
時間Tue Jan 17 02:57:07 2017
開發平台(Platform): (Ex: Win10, Linux, ...)
Win10
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
GCC
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
問題(Question):
單純測試有設定return型態但是沒有return值的狀況
餵入的資料(Input):
無
預期的正確結果(Expected Output):
compile不過
錯誤結果(Wrong Output):
印出傳入的數值
程式碼(Code):(請善用置底文網頁, 記得排版)
#include <stdio.h>
int sum(int a){
a+1;
}
int main(){
int a = 5;
printf("%d", sum(a));
}
補充說明(Supplement):
以前初學C的時候因為沒測試過這種狀況
前兩天碰到但是不知道原理
原本猜測會在編譯時候出錯 但是編譯可以過 以及還能夠印出值(5)
代表以前學到的概念錯很大
想請問compiler是怎麽處理這個部分的呢?
(以為compiler不會過但是過了,過了以為數值會是未知數卻是5這樣)
希望能有前輩能解惑 感謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.240.240.142
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1484593030.A.7D0.html
1F:推 winken2004: 大概是calling stack的關係 01/17 04:04
2F:→ barrykaze: return值沒寫 01/17 09:15
3F:推 james732: 你為什麼覺得應該要能編譯與執行? 01/17 09:32
4F:推 firejox: 只是Warning開的不夠多吧(′・ω・`) 01/17 10:31
5F:→ HolyBugTw: -Wall 01/17 10:54
6F:推 boss0405: 印象中會報warning,印出5應該屬於未定義行為 01/17 11:02
7F:→ Neisseria: 換個編譯器看看,可能結果會不一樣 01/17 11:17
8F:→ Neisseria: 玩玩就好,真的要用的程式不要這樣寫 01/17 11:17
9F:→ pppty: 這是一個剛學的朋友問的問題 但是能力不夠給他答案 01/17 12:58
10F:推 jerryh001: 因為有個原本要放return值的位置 因為沒return 所以就 01/17 15:26
11F:→ jerryh001: 抓到a的位置 01/17 15:26
12F:→ narcissusli: 遇過compiler會重複使用位置, 跟最佳化有關嗎? 01/17 23:19
13F:噓 Sidney0503: 又來一個未定義行為 01/18 06:50