你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
举报
moyanming2013 发表于 2015-5-8 12:34 1.括号位置有影响! 2.上述2行都不正确! 在define中的变量都要用括号,比如defined (STM32F10X_MD_VL),任 ...
为什么是EEFOCUS小白 发表于 2015-5-8 14:22 这是ST3.5库文件的写法,两个都是,他们应该不会写错吧
moyanming2013 发表于 2015-5-8 22:17 对于预定义,比如 #define add(a,b) a+b//未加任何括号 #define mul(a,b) (a*b)//加了1层括号
2.上述2行都不正确!
在define中的变量都要用括号,比如defined (STM32F10X_MD_VL),任何一个都要用!
这是ST3.5库文件的写法,两个都是,他们应该不会写错吧
对于预定义,比如
#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)
就你的解释最为合理