作者ggg12345 (ggg)
看板Soft_Job
標題Re: [閒聊] 大家工作上看過哪些誇張的 CODE ?
時間Wed May 19 12:23:04 2010
※ 引述《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