zoukankan      html  css  js  c++  java
  • 不要随便用#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);

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

  • 相关阅读:
    事件记录
    C++和extern C
    中断控制器
    NAND FLASH控制器
    MMU实验
    存储管理器实验
    GPIO实验
    linux与Windows使用编译区别及makefile文件编写
    ubuntu如何为获得root权限
    VI常用命令及linux下软件
  • 原文地址:https://www.cnblogs.com/chenchenluo/p/2166154.html
Copyright © 2011-2022 走看看