搜索
bottom↓
回复: 11

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

[复制链接]

出0入0汤圆

发表于 2020-1-6 10:43:24 | 显示全部楼层 |阅读模式
printf(“helloworld!”),用SI追踪j进去的宏定义是这样#define printf(...)             do {} while (0)
有点难以理解,printf是debug能打印信息,应是对硬件操作才对。但宏定义中看不出来。

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入4汤圆

发表于 2020-1-6 12:04:08 来自手机 | 显示全部楼层
是不是嵌入式系统,不支持printf,调用就死循环……

出0入59汤圆

发表于 2020-1-6 12:05:45 | 显示全部楼层
嵌入式系统,不支持printf,调用就空操作

出0入4汤圆

发表于 2020-1-6 12:15:38 来自手机 | 显示全部楼层
看走眼了。while(0)看成while(1)了……

出0入0汤圆

 楼主| 发表于 2020-1-6 12:22:17 | 显示全部楼层
dykwai1 发表于 2020-1-6 12:05
嵌入式系统,不支持printf,调用就空操作

看代码的意思是空操作,不是楼上说的死循环。
串口确实能打印出信息,我全局搜索过printf定义,也只有这一处宏定义。

出0入0汤圆

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

那可能是放在lib文件内了,通过桩函数实现fputc或_write,就能使用printf了

出0入4汤圆

发表于 2020-1-6 12:26:58 来自手机 | 显示全部楼层
把do里面随便写点啥语法错误,看看还能编译过么?怀疑没有用那个宏,直接用库里的?

出0入0汤圆

发表于 2020-1-6 12:51:05 | 显示全部楼层
本帖最后由 jenkins 于 2020-1-6 12:52 编辑

当宏定义不是一行时习惯用do {} while (0)把代码变成一个整体。参考:https://www.jianshu.com/p/99efda8dfec9

出0入75汤圆

发表于 2020-1-6 13:18:02 | 显示全部楼层
LZ写的东西让人难理解,是不是问这样定义的,为什么还能打印出来东西?

出10入46汤圆

发表于 2020-1-6 14:52:59 | 显示全部楼层
宏定义如果没有被调用。 为啥不能打印出东西?

出0入0汤圆

发表于 2020-1-6 15:48:55 | 显示全部楼层
你把和串口有关的代码删除,看看还能打印吗?》基于嵌入式单片机。
都是有串口映射的。

出0入85汤圆

发表于 2020-1-6 16:06:39 来自手机 | 显示全部楼层
是不是在某处实现了fputc?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-2 15:01

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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