system_stm32f10x.c文件的一点小疑问

2019-07-14 17:24发布

#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)
1、括号的位置对于这个语句的结果有没有影响?
2、那种才是正确的用法?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
6条回答
7762642422d
2019-07-15 09:25
selinali0112 发表于 2018-9-26 09:27
这是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)

一周热门 更多>