gpt4 book ai didi

c++ - 标准 C++ assert() 如何工作以及如何重新定义它?

转载 作者:太空宇宙 更新时间:2023-11-04 16:14:40 24 4
gpt4 key购买 nike

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]

如何将我的函数绑定(bind)到自定义断言或标准断言,以便在断言失败时调用该函数?

请注意,我不需要像 here 中讨论的那样功能齐全、符合标准的 assert .我将仅将它用作一行中的单个语句,对变量或常量进行简单比较。

最佳答案

文件名可能是一个字符串常量 (const char*),但您的函数需要一个 char* 参数。这种不匹配会导致错误。

如果您将函数参数声明为 const char *fname,错误应该会消失。

关于c++ - 标准 C++ assert() 如何工作以及如何重新定义它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24184075/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com