yulutong 发表于 2020-1-6 10:43:24

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

printf(“helloworld!”),用SI追踪j进去的宏定义是这样#define printf(...)             do {} while (0)
有点难以理解,printf是debug能打印信息,应是对硬件操作才对。但宏定义中看不出来。

get500wan 发表于 2020-1-6 12:04:08

是不是嵌入式系统,不支持printf,调用就死循环……

dykwai1 发表于 2020-1-6 12:05:45

嵌入式系统,不支持printf,调用就空操作

get500wan 发表于 2020-1-6 12:15:38

看走眼了。while(0)看成while(1)了……

yulutong 发表于 2020-1-6 12:22:17

dykwai1 发表于 2020-1-6 12:05
嵌入式系统,不支持printf,调用就空操作

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

muniao 发表于 2020-1-6 12:26:02

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

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

get500wan 发表于 2020-1-6 12:26:58

把do里面随便写点啥语法错误,看看还能编译过么?怀疑没有用那个宏,直接用库里的?

jenkins 发表于 2020-1-6 12:51:05

本帖最后由 jenkins 于 2020-1-6 12:52 编辑

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

Doding 发表于 2020-1-6 13:18:02

LZ写的东西让人难理解,是不是问这样定义的,为什么还能打印出来东西?

gonboy 发表于 2020-1-6 14:52:59

宏定义如果没有被调用。 为啥不能打印出东西?

Excellence 发表于 2020-1-6 15:48:55

你把和串口有关的代码删除,看看还能打印吗?》基于嵌入式单片机。
都是有串口映射的。

Huaan 发表于 2020-1-6 16:06:39

是不是在某处实现了fputc?
页: [1]
查看完整版本: openrtos的#define printf(...) do {} while (0)原型怎么理解?