看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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://www.ptt.cc/bbs/C_and_CPP/M.1484593030.A.7D0.html
winken2004: 大概是calling stack的關係 01/17 04:04
barrykaze: return值沒寫 01/17 09:15
james732: 你為什麼覺得應該要能編譯與執行? 01/17 09:32
firejox: 只是Warning開的不夠多吧(′・ω・`) 01/17 10:31
HolyBugTw: -Wall 01/17 10:54
boss0405: 印象中會報warning,印出5應該屬於未定義行為 01/17 11:02
Neisseria: 換個編譯器看看,可能結果會不一樣 01/17 11:17
Neisseria: 玩玩就好,真的要用的程式不要這樣寫 01/17 11:17
pppty: 這是一個剛學的朋友問的問題 但是能力不夠給他答案 01/17 12:58
jerryh001: 因為有個原本要放return值的位置 因為沒return 所以就 01/17 15:26
jerryh001: 抓到a的位置 01/17 15:26
narcissusli: 遇過compiler會重複使用位置, 跟最佳化有關嗎? 01/17 23:19
Sidney0503: 又來一個未定義行為 01/18 06:50