2019-07-14 17:24发布
7762642422d 发表于 2018-9-26 09:16 1.括号位置有影响! 2.上述2行都不正确! 在define中的变量都要用括号,比如defined (STM32F10X_MD_VL),任何一个都要用!
selinali0112 发表于 2018-9-26 09:27 这是ST3.5库文件的写法,两个都是,他们应该不会写错吧
7762642422d 发表于 2018-9-26 09:52 本帖最后由 moyanming2013 于 2015-5-8 22:23 编辑 对于预定义,比如
最多设置5个标签!
这是ST3.5库文件的写法,两个都是,他们应该不会写错吧
本帖最后由 moyanming2013 于 2015-5-8 22:23 编辑
对于预定义,比如
#define add(a,b) a+b//未加任何括号
#define mul(a,b) (a*b)//加了1层括号
上述看起来没有任何的错误。
如果你是用如下时:
z=z*add(x,y)
会把mul替换为如下:
z=z*x+y
这显然事与愿违,想要的是
z=z*(x+y)
此时问题来了,当a或b也是一个符合运算时,该如何呢?比如a为m+n时
z=z*mul(m+n,p)
此时被编译为:
z=z*(m+n*p)
这显然又错了!该怎么办呢?改为:
#define add(a+b) ((a)+(b))//加了所有括号
#define mul(a,b) ((a)*(b))//加了所有括号
固件库里之所以那么写,1是因为上述是判断语句,2就是STM32F10X开头的几个预定义,此前就假设不可能是一个复合语句,3就是上述显然不是同一个人写的。
都有一个预防错误的心,但是都没有写对,改为:
#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL)
#elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL)
就你的解释最为合理
一周热门 更多>