你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

system_stm32f10x.c 文件的一点小疑问

[复制链接]
为什么是EEFOCUS小白 提问时间:2015-5-8 11:44 /
#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、那种才是正确的用法?
收藏 评论7 发布时间:2015-5-8 11:44

举报

7个回答
moyanming2013 回答时间:2015-5-8 12:34:57
1.括号位置有影响!
2.上述2行都不正确!
在define中的变量都要用括号,比如defined (STM32F10X_MD_VL),任何一个都要用!
为什么是EEFOCUS小白 回答时间:2015-5-8 14:22:05
moyanming2013 发表于 2015-5-8 12:34
1.括号位置有影响!
2.上述2行都不正确!
在define中的变量都要用括号,比如defined (STM32F10X_MD_VL),任 ...

这是ST3.5库文件的写法,两个都是,他们应该不会写错吧
stary666 回答时间:2015-5-8 14:31:50
()可以去
wyxy163@126.com 回答时间:2015-5-8 15:09:00
提示: 作者被禁止或删除 内容自动屏蔽
moyanming2013 回答时间:2015-5-8 22:17:33
本帖最后由 moyanming2013 于 2015-5-8 22:23 编辑
为什么是EEFOCUS小白 发表于 2015-5-8 14:22
这是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)
为什么是EEFOCUS小白 回答时间:2015-5-9 09:13:20
moyanming2013 发表于 2015-5-8 22:17
对于预定义,比如
#define add(a,b) a+b//未加任何括号
#define mul(a,b) (a*b)//加了1层括号

就你的解释最为合理
eurphan 回答时间:2015-5-9 23:43:52
不懂帮顶

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版