足球资料库数据/孙祥/nba五佳球/足球直播哪个平台好 - cctv5今日现场直播

首頁 > 知識庫 > 正文

每天學點C++知識:復制粘貼代碼千萬要小心
2016-01-19 21:57:44   來源: mengyidan1988   評論:0 點擊:

英文出處:Andrey Karpov 譯文來自:伯樂在線 有個國外團隊檢測了 200 多個 C C++ 開源項目,包括了 Php、Qt 和 Linux 內(nèi)核等知名項目。于是他們每天分享一個錯誤案例,并
英文出處:Andrey Karpov
譯文來自:伯樂在線
有個國外團隊檢測了 200 多個 C/C++ 開源項目,包括了 Php、Qt 和 Linux 內(nèi)核等知名項目。于是他們每天分享一個錯誤案例,并給出相應建議。本篇案例來自 Audacity 源代碼。

錯誤代碼:
sampleCount VoiceKey::OnBackward (....) {  ...  int atrend = sgn(buffer[samplesleft - 2]-                   buffer[samplesleft - 1]);                            int ztrend = sgn(buffer[samplesleft - WindowSizeInt-2]-                   buffer[samplesleft - WindowSizeInt-2]);  ...}

解釋:

“buffer[samplesleft - WindowSizeInt-2]” 該表達式是減去其自身。這個錯誤是由于復制粘貼代碼引起的,該程序員復制了一行代碼,卻忘記把 2 改為 1 了。

正確的代碼:
int ztrend = sgn(buffer[samplesleft - WindowSizeInt-2]-                 buffer[samplesleft - WindowSizeInt-1]);

建議:

復制粘貼代碼時千萬要小心。

不建議大家拒絕使用復制粘貼的方法,畢竟它確實很有用,使用起來太方便了。但用的時候千萬要小心,不要著急。

俗話說有備無患。記住復制粘貼代碼可能會導致大量的錯誤。看看這些通過 V501 診斷發(fā)現(xiàn) bug 的例子中,有一半的錯誤都是由于使用復制粘貼方法導致的,另外一半是因為拼寫錯誤。當然關于這個話題,我們另一篇文章專門寫到它。

當你復制代碼并進行修改的時候,時刻要記得檢查你是否完全做對了!千萬別偷懶!

另外,我們還會討論更多關于復制粘貼的話題,我打賭你還沒意識到這個問題影響的范圍有多廣,但是我保證會讓你印象深刻。

相關熱詞搜索:c++ 經(jīng)驗分享 language 編程語言

上一篇:Facebook架構解讀
下一篇:MiniDao-PE版 1.5.4 發(fā)布,輕量級J2EE持久化解決方案

分享到: 收藏