128 Star 898 Fork 321

GVP朱天龙 (Armink) / FlashDB

 / 详情

开启FDB_ASSERT(EXPR)宏定义 编译报错问题反馈

待办的
创建于  
2021-10-18 11:12

上周下载了最新的版本进行移植,调试阶段在配置头文件"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编译器有问题

评论 (1)

bobde163 创建了任务
bobde163 关联仓库设置为armink/FlashDB
bobde163 修改了描述
展开全部操作日志

经进一步查询,是我的用法存在问题,需要注意的是,如果需要在某个源文件中使用FDB_ASSERT(EXPR)宏,必须要在此源文件中定义FDB_LOG_TAG这个宏,否则在编译阶段,宏展开后无有效的FDB_LOG_TAG宏定义会编译报错。

建议:在“配置说明”中增加此说明。

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(1)
C
1
https://gitee.com/Armink/FlashDB.git
git@gitee.com:Armink/FlashDB.git
Armink
FlashDB
FlashDB

搜索帮助