在assert.h
我们可以看到
# define assert(__e) ((__e) ? (void)0 : __assert_func (__FILE__, __LINE__, \
__ASSERT_FUNC, #__e))
由于目标是嵌入式的,我需要在断言失败时实际显示错误消息,因此我需要调用LCD写入功能。我尝试了以下方法:
void handleCriticalError(int err_num, char *fname, int line_num, const char *foo); // Halts the program!
#define ASSERT(__e) ((__e) ? (void)0 : handleCriticalError (0, __FILE__, __LINE__, __func__))
然而,当我使用它时,我得到一个奇怪的错误。
ASSERT(1<2);
>error: deprecated conversion from string constant to 'char*' [-Werror=write-strings]
如何将我的函数绑定到自定义断言或标准断言,以便在断言失败时调用该函数?
请注意,我不需要按照here讨论的全功能,标准的assert
。我将仅将其用作一行上的单个语句,并对变量或常量进行简单比较。
答案 0 :(得分:3)
文件名可能是字符串常量(const char*
),但您的函数采用char*
参数。这种不匹配会导致错误。
如果您将函数参数声明为const char *fname
,则错误应该消失。
答案 1 :(得分:2)
重新定义你的功能:
void handleCriticalError(int err_num, char const *fname, int line_num, const char *foo);
note const *fname
参数应该接受__FILE__