慘痛教訓(xùn)分享給大家,再次體會(huì)到程序風(fēng)格的重要性
本人寫程序已有很多年,寫程序時(shí)就相當(dāng)注意程序格式,但我還是栽在這上面了.
本人程序出現(xiàn)debug,花了很多天都沒找到,最后使用最笨的辦法,用studio進(jìn)行每條指令跟蹤,終于發(fā)現(xiàn)問題所在.
由于本人是匯編和C混合編程,為充分保持定義的一致辭性,我盡量使用相同的.h文檔,這種方法是對的,只是我的匯編在編譯時(shí)要注明是assember-with-cpp.
我的匯編程序如下:
......
#define VOICE 1 ;this is voice address
......
ldi r30, VOICE+1
......
一般我們不會(huì)認(rèn)為這是錯(cuò)誤, 很顯然,";"是匯編的注釋, #define是C語言的預(yù)處理,雖然在匯編中使用C的預(yù)處理能帶來很多好處,但我們還是應(yīng)該盡量不要糾纏到一起,這就是編程風(fēng)格問題.上述我的錯(cuò)誤就是這樣,C語言的預(yù)處理器會(huì)將VOICE換成" 1 ;this is voice address", 注意,C是不懂";"注釋的,最后編譯的結(jié)果就是
ldi r30, 1
而不是我所期望的ldi r30,2
而且編譯程序不會(huì)報(bào)告任何錯(cuò)誤,從語法上它是正確的.而且在debug時(shí)帶來的錯(cuò)誤是災(zāi)難的,因?yàn)樗茈y找到,人的特點(diǎn)就是不會(huì)去注意"理所當(dāng)然是正確的"東西.
其實(shí)我只要將上述的匯編";"注釋換成C的"http://"注釋就什么問題都沒有了,在一行中保持同樣的C風(fēng)格是多么的重要啊.