预处理器宏问题

乔尔·桑托斯·里科

我想为我的有限状态机编写一个调试日志打印功能,该功能可以打印当前状态,时间(以毫秒为单位)以及消息。但是,我得到随机结果。这是我所做的:

#define DEBUG_PRINT(tag, format, ...) printf("[%10s] %7d: " format "\n", tag, millis(), ##__VA_ARGS__)

当我跑步时:

DEBUG_PRINT("SETUP", "%d %d %d %d", 1, 2, 3, 4);

我希望得到:[ SETUP] 0: 1 2 3 4
         但我得到:[ SETUP] 0: 0 1 2 3

添加一个额外的%d将得到“ 4”,但我仍然得到一个虚假的0。

我之前的首次亮相日志宏:DEBUG_PRINT1("%d %d %d %d", 1, 2, 3, 4);打印期望的1 2 3 4

您能帮我摆脱那多余的0吗?

硝基

问题在于该millis()函数返回一个unsigned long,其中标识符为%d整数。

将其更改为%7ld,它应该可以正常工作。

我已经测试过了

编辑1:

我也在Linux系统上进行了测试。在linux系统中,这不是问题,因为linux的大小int为4字节,long为8字节。

但是,在Arduino上,an的大小int为2个字节,long为4个字节。此螺钉了%d上Arduino的标识符,并且扩展了unsigned longmillis()下一个%d

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章