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

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
()可以去
数码小叶 回答时间: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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版