openrtos的#define printf(...) do {} while (0)原型怎么理解?
printf(“helloworld!”),用SI追踪j进去的宏定义是这样#define printf(...) do {} while (0)有点难以理解,printf是debug能打印信息,应是对硬件操作才对。但宏定义中看不出来。 是不是嵌入式系统,不支持printf,调用就死循环…… 嵌入式系统,不支持printf,调用就空操作 看走眼了。while(0)看成while(1)了…… dykwai1 发表于 2020-1-6 12:05
嵌入式系统,不支持printf,调用就空操作
看代码的意思是空操作,不是楼上说的死循环。
串口确实能打印出信息,我全局搜索过printf定义,也只有这一处宏定义。 yulutong 发表于 2020-1-6 12:22
看代码的意思是空操作,不是楼上说的死循环。
串口确实能打印出信息,我全局搜索过printf定义,也只有这 ...
那可能是放在lib文件内了,通过桩函数实现fputc或_write,就能使用printf了 把do里面随便写点啥语法错误,看看还能编译过么?怀疑没有用那个宏,直接用库里的? 本帖最后由 jenkins 于 2020-1-6 12:52 编辑
当宏定义不是一行时习惯用do {} while (0)把代码变成一个整体。参考:https://www.jianshu.com/p/99efda8dfec9 LZ写的东西让人难理解,是不是问这样定义的,为什么还能打印出来东西? 宏定义如果没有被调用。 为啥不能打印出东西?
你把和串口有关的代码删除,看看还能打印吗?》基于嵌入式单片机。
都是有串口映射的。 是不是在某处实现了fputc?
页:
[1]