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条回答
selinali0112
1楼-- · 2019-07-15 01:20
7762642422d 发表于 2018-9-26 09:16
1.括号位置有影响!
2.上述2行都不正确!
在define中的变量都要用括号,比如defined (STM32F10X_MD_VL),任何一个都要用!

这是ST3.5库文件的写法,两个都是,他们应该不会写错吧
nyvvhxcs
2楼-- · 2019-07-15 03:19
 精彩回答 2  元偷偷看……
youxi8745
3楼-- · 2019-07-15 09:09
没影响吧
7762642422d
4楼-- · 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)
selinali0112
5楼-- · 2019-07-15 13:53
7762642422d 发表于 2018-9-26 09:52
本帖最后由 moyanming2013 于 2015-5-8 22:23 编辑

对于预定义,比如

就你的解释最为合理
vyywywew
6楼-- · 2019-07-15 13:55
不懂帮顶

一周热门 更多>