代码拉取完成,页面将自动刷新
上周下载了最新的版本进行移植,调试阶段在配置头文件"fdb_cfg.h"打开了FDB_DEBUG_ENABLE,测试代码中使用了FDB_ASSERT(EXPR)的宏之后,在keil下编译报错,定位在此宏定义出错,通过查看预编译文件,一开始还没看出来问题,还以为是编译器BUG,然后我抽丝剥茧,一层层展开宏里面的源代码,最终定位到一处错误,位于"fdb_def.h"里的打印相关的宏定义:#define FDB_LOG_PREFIX1() FDB_PRINT("[FlashDB]" FDB_LOG_TAG),而FDB_LOG_TAG的宏定义如下:#define FDB_LOG_TAG "[tsl]",位于fdb_tsdb.c中;在测试代码中宏FDB_LOG_PREFIX1()预编译后代码为printf("[FlashDB]" FDB_LOG_TAG),最终编译报错。
详细代码如下:fdb_def.h
/* log function. default FDB_PRINT macro is printf() */
#ifndef FDB_PRINT
#define FDB_PRINT(...) printf(__VA_ARGS__)
#endif
**#define FDB_LOG_PREFIX1() FDB_PRINT("[FlashDB]" FDB_LOG_TAG)**
#define FDB_LOG_PREFIX2() FDB_PRINT(" ")
#define FDB_LOG_PREFIX() FDB_LOG_PREFIX1();FDB_LOG_PREFIX2()
#ifdef FDB_DEBUG_ENABLE
#define FDB_DEBUG(...) FDB_LOG_PREFIX();FDB_PRINT("(%s:%d) ", __FILE__, __LINE__);FDB_PRINT(__VA_ARGS__)
#else
#define FDB_DEBUG(...)
#endif
我会继续进一查找是不是我所用的keil编译器有问题
经进一步查询,是我的用法存在问题,需要注意的是,如果需要在某个源文件中使用FDB_ASSERT(EXPR)宏,必须要在此源文件中定义FDB_LOG_TAG这个宏,否则在编译阶段,宏展开后无有效的FDB_LOG_TAG宏定义会编译报错。
建议:在“配置说明”中增加此说明。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
登录 后才可以发表评论