當(dāng)前位置: 首頁 > 工業(yè)控制產(chǎn)品 > 自動化控制 > DCS系統(tǒng)
發(fā)布日期:2022-04-17 點擊率:18
有個國外團隊檢測了 200 多個 C/C++ 開源項目,包括了 Php、Qt 和 Linux 內(nèi)核等知名項目。于是他們每天分享一個錯誤案例,并給出相應(yīng)建議。本篇案例來自 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]” 該表達式是減去其自身。這個錯誤是由于復(fù)制粘貼代碼引起的,該程序員復(fù)制了一行代碼,卻忘記把 2 改為 1 了。
正確的代碼:
int ztrend = sgn(buffer[samplesleft - WindowSizeInt-2]-
buffer[samplesleft - WindowSizeInt-1]);
建議:
復(fù)制粘貼代碼時千萬要小心。
不建議大家拒絕使用復(fù)制粘貼的方法,畢竟它確實很有用,使用起來太方便了。但用的時候千萬要小心,不要著急。
俗話說有備無患。記住復(fù)制粘貼代碼可能會導(dǎo)致大量的錯誤。看看這些通過 V501 診斷發(fā)現(xiàn) bug 的例子中,有一半的錯誤都是由于使用復(fù)制粘貼方法導(dǎo)致的,另外一半是因為拼寫錯誤。當(dāng)然關(guān)于這個話題,我們另一篇文章專門寫到它。
當(dāng)你復(fù)制代碼并進行修改的時候,時刻要記得檢查你是否完全做對了!千萬別偷懶!
另外,我們還會討論更多關(guān)于復(fù)制粘貼的話題,我打賭你還沒意識到這個問題影響的范圍有多廣,但是我保證會讓你印象深刻。
下一篇: PLC、DCS、FCS三大控
上一篇: 索爾維全系列Solef?PV