不要随便用#define

       在编写C语言和C++程序的时候,经常会为了一些查不出原因的错误头疼,仿佛感觉自己想破脑袋也不知道错在哪里。今天就又遇到了这个问题,而且不是第一次。

       在NIOS IDE下用C语言开发串口程序,有一条语句是用来设置波特率的:

  UART->DIVISIOR.WORD=(unsigned long int)(CLOCK/num+0.5);

      编译器在编译的时候在该处报错:严重的error before “;”;

         当时想破脑袋也看不出来这句话错在哪里,只好硬着头皮将所有的头文件和源文件重新看一遍,不经意间注意到对CLOCK的预定义为:“   #define CLOCK 100000000;”

        突然恍然大悟,预定义只是忠实的替换,如果100000000后面有“;”,这编译器在展开后上述语句变成:

        UART->DIVISIOR.WORD=(unsigned long int)(100000000;/num+0.5);

  所以编译器会出现上述类型的错误,这种错误类型比较低级,但是有很难发现,且对于编程经验不是很多的人来说很容易犯。要引以为戒。

 

转载于:https://www.cnblogs.com/chenchenluo/archive/2011/09/04/2166154.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值