单片机/MCU论坛
直播中

刘艳

8年用户 2502经验值
私信 关注
[问答]

keil 编译器编译 N76E003代码加括号就报错

#define     InputSDIO()                                     (P00_Input_Mode;set_P0S_0;)
使用宏定义的时候 加括号就会报错 SOURCECMT2300CMT2300.C(420): error C141: syntax error near ';'
#define     InputSDIO()                                     P00_Input_Mode;set_P0S_0;
不加括号就不会报错这是为什么?

回帖(13)

杜喜喜

2018-11-2 10:05:21
大哥,分号请放在最后,谢谢
举报

刘艳

2018-11-2 10:05:33
什么意思 ,我这是两句话啊 而且
#define     InputSDIO()                                     (P00_Input_Mode set_P0S_0) ;
#define     InputSDIO()                                     (P00_Input_Mode ,set_P0S_0) ;
#define     InputSDIO()                                     (P00_Input_Mode set_P0S_0;)
都不行
举报

张华

2018-11-2 10:05:54
调用的地方贴出来看看,宏定义单纯就是文本替换,替换以后你看语法上有没有问题。
1 举报

刘艳

2018-11-2 10:06:15
u8 bSpi3ReadByte(void)
{
         u8 RdPara = 0;
         u8 bitcnt;
   
         ClrCSB();
         InputSDIO();                        
           InputSDIO();               
         for(bitcnt=8; bitcnt!=0; bitcnt--)
                 {
                 ClrSDCK();
                 RdPara <<= 1;
                 Delay_10us(SPI3_SPEED);
                 SetSDCK();
                 Delay_10us(SPI3_SPEED);
                 if(SDIO_H())
                         RdPara |= 0x01;
                 else
                         RdPara |= 0x00;
                 }
         ClrSDCK();
         OutputSDIO();
         OutputSDIO();
         SetSDIO();
         SetCSB();                        
         return(RdPara);        
}
举报

刘艳

2018-11-2 10:06:23
每次都是在我调用的地方报错
举报

李勇

2018-11-2 10:06:32
这里为什么要加括号,没有优先级的计算。。。
举报

王桂英

2018-11-2 10:06:41
另外,调用的地方不需要再加分号的,去掉试试。再就是如果没有特殊需要宏的名字里也别加括号
举报

杨勇

2018-11-2 10:06:48
圆括弧不可以那么用。。
举报

李涛

2018-11-2 10:06:55
{花括弧}就没有问题
1 举报

li

2018-11-4 10:59:41
兄弟,注意排版,这是细节啊
举报

罗晨

2018-11-4 16:20:19
兄弟,注意排版,这是细节啊
举报

罗晨

2018-11-4 16:21:02
兄弟,注意排版,这是细节啊
举报

alonggege

2019-7-23 15:01:28
不错,很好的经验分享,辛苦麻烦了,欠缺这方面的资料,非常感谢。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分