看板 Soft_Job 關於我們 聯絡資訊
※ 引述《pinkRD (一葉知秋)》之銘言: : ※ 引述《bobhsiao (㊣小臃腫㊣)》之銘言: : : 最近看到同事寫一個 : : char* GetXXXName(...) : : { : : char str[256] = {'\0'}; : : ..... : : return str; : : } : : 回傳區域變數指標...囧rz : : 神奇的是跑起來都沒錯, 大概也不會改了吧 : 就只是為了求方便求快 : 只是為了某些識別的用途 : 這個識別的字串大小固定 這固定大小算是符合 range and array size check 的安全性核驗 避免 stack overflow attack. : 使用這個程式的演算法快速的需求遠大於安全性 : 例如只是輔助演算法判斷之用 : 即使失敗也仍可以繼續正常處理 : 又或者只是輕量級的debug資訊 : 至於不加上static的情況下回傳local variable.... 某些語言先天上支援 recursive function call, 所以使用 stack 存放 local variable. 若傳回 local variable 的 reference address 供上層 呼叫者 使用, 只要上層呼叫者之後不再叫用其他 function procedure 以前, 都是不會動用到 stack. 所以回傳的指標值都不會受 影響. 這是特異用法, 對後續維護者會有副作用後遺症. : 難道是關閉所有中斷line的top half? : 不知道這樣設想對不對... 不知 此段的意思指何處? 處理 interrupt 的 kernel ISR 嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.4.12
ledia:嘆為觀止... 懶得糾正你了.... Orz 05/19 13:37
bobhsiao:我印象中用recursive call都是傳值,應該不會有這個問題吧 05/19 13:40
ledia:樓上, 他說的是傳回某個 stack address 05/19 13:41
ggg12345:不要亂解釋.用call reference(address)寫遞迴結果就是了! 05/19 14:49
ggg12345:call by reference傳結果只要在下個f-call之前,都是對的! 05/19 14:52