从学C开始,就知道宏定义用起来能使程序容易理解。有时候在编程时,能帮我们不少忙!!
不过最近,却老是被它给卡住。
在学C时,自己并不怎么用宏定义,只知道它是在预编译时给展开,也就是字符的替换。
后来,第一次感受到宏定义的方便是在改写一个 LPC2103的DS18B20的驱动程序,
看到他们将IO操作的两条语句用宏定义来操作
#define SET_IO {IO0DIR |= DQ; IO0SET |=DQ;}
感觉在编写程序时方便了好多。
后来自己渐渐也用这种方式来编写IO的操作语句,
一只好用,没有出什么大错(可能有小的错误,只是自己没注意),
今天,一同学在改写一个液晶的驱动函数时
定义的是#define SET_LCD_E 1 << 7
在使用时,*IOPORT_B &= ~SET_LCD_E;
在调试时发现取反后~SET_LCD_E的值是了0xff00;
开始,还真看不出是哪里有毛病,只得用了两个变量,
看他们的结果咋样,单步调试后发现结果正常,
这才再次回去看宏定义,
发现这展开后变成了
*IOPORT_B &= ~ 1 << 7;
这肯定不对,
把上边的宏定义加个括号后,
#define SET_LCD_E (1 << 7)
再运行,正常!
看来宏定义的括号,真是有用呀!!
看来以后这宏定义用得时候,真得小心!!
虽然给了点小意外,不过还是挺有用的!!
关键还是自己C还有待加强!!