惨痛教训分享给大家,再次体会到程序风格的重要性
扫描二维码
随时随地手机看文章
本人写程序已有很多年,写程序时就相当注意程序格式,但我还是栽在这上面了.
本人程序出现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风格是多么的重要啊.