惨痛教训分享给大家,再次体会到程序风格的重要性
详细内容
名称:惨痛教训分享给大家,再次体会到程序风格的重要性
本人写程序已有很多年,写程序时就相当注意程序格式,但我还是栽在这上面了。
本人程序出现debug,花了很多天都没找到,最后使用最笨的办法,用studio进行每条指令跟踪,终于发现问题所在。
由于本人是汇编和C混合编程,为充分保持定义的一致辞性,我尽量使用相同的。h文档,这种方法是对的,只是我的汇编在编译时要注明是assember-with-cpp.
我的汇编程序如下:
......
#define VOICE 1 ;this is voice address
......
ldi r30, VOICE+1
......
一般我们不会认为这是错误,很显然,";"是汇编的注释, #define是C语言的预处理,虽然在汇编中使用C的预处理能带来很多好处,但我们还是应该尽量不要纠缠到一起,这就是编程风格问题。上述我的错误就是这样,C语言的预处理器会将VOICE换成" 1 ;this is voice address",注意,C是不懂";"注释的,最后编译的结果就是
ldi r30, 1
而不是我所期望的ldi r30,2
而且编译程序不会报告任何错误,从语法上它是正确的。而且在debug时带来的错误是灾难的,因为它很难找到,人的特点就是不会去注意"理所当然是正确的"东西。
其实我只要将上述的汇编";"注释换成C的"//"注释就什么问题都没有了,在一行中保持同样的C风格是多么的重要啊。