amoBBS 阿莫电子论坛

 找回密码
 注册
搜索
bottom↓
查看: 204|回复: 11

openrtos的#define printf(...) do {} while (0)原型怎么理解?

[复制链接]
发表于 2020-1-6 10:43:24 | 显示全部楼层 |阅读模式
printf(“helloworld!”),用SI追踪j进去的宏定义是这样#define printf(...)             do {} while (0)
有点难以理解,printf是debug能打印信息,应是对硬件操作才对。但宏定义中看不出来。
发表于 2020-1-6 12:04:08 来自手机 | 显示全部楼层
是不是嵌入式系统,不支持printf,调用就死循环……
发表于 2020-1-6 12:05:45 | 显示全部楼层
嵌入式系统,不支持printf,调用就空操作
发表于 2020-1-6 12:15:38 来自手机 | 显示全部楼层
看走眼了。while(0)看成while(1)了……
 楼主| 发表于 2020-1-6 12:22:17 | 显示全部楼层
dykwai1 发表于 2020-1-6 12:05
嵌入式系统,不支持printf,调用就空操作

看代码的意思是空操作,不是楼上说的死循环。
串口确实能打印出信息,我全局搜索过printf定义,也只有这一处宏定义。
发表于 2020-1-6 12:26:02 | 显示全部楼层
yulutong 发表于 2020-1-6 12:22
看代码的意思是空操作,不是楼上说的死循环。
串口确实能打印出信息,我全局搜索过printf定义,也只有这 ...

那可能是放在lib文件内了,通过桩函数实现fputc或_write,就能使用printf了
发表于 2020-1-6 12:26:58 来自手机 | 显示全部楼层
把do里面随便写点啥语法错误,看看还能编译过么?怀疑没有用那个宏,直接用库里的?
发表于 2020-1-6 12:51:05 | 显示全部楼层
本帖最后由 jenkins 于 2020-1-6 12:52 编辑

当宏定义不是一行时习惯用do {} while (0)把代码变成一个整体。参考:https://www.jianshu.com/p/99efda8dfec9
发表于 2020-1-6 13:18:02 | 显示全部楼层
LZ写的东西让人难理解,是不是问这样定义的,为什么还能打印出来东西?
发表于 2020-1-6 14:52:59 | 显示全部楼层
宏定义如果没有被调用。 为啥不能打印出东西?
发表于 2020-1-6 15:48:55 | 显示全部楼层
你把和串口有关的代码删除,看看还能打印吗?》基于嵌入式单片机。
都是有串口映射的。
发表于 2020-1-6 16:06:39 来自手机 | 显示全部楼层
是不是在某处实现了fputc?
友情提示:标题不合格、重复发帖,将会被封锁ID。详情请参考:论坛通告:封锁ID、获得注册邀请码、恢复被封ID、投诉必读
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|阿莫电子论坛(原ourAVR/ourDEV) ( 公安备案:44190002001997(交互式论坛) 工信部备案:粤ICP备09047143号 )

GMT+8, 2020-2-24 21:43

阿莫电子论坛, 原"中国电子开发网"

© 2004-2018 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表