打印
[牛人杂谈]

断言如何用,你会吗

[复制链接]
286|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
一般在芯片的某个头文件会有以下内容
#if USE_ASSERT

/**
* [url=home.php?mod=space&uid=247401]@brief[/url]      Assert Error Message
*
* @param[in]  file  the source file name
* @param[in]  line  line number
*
* [url=home.php?mod=space&uid=266161]@return[/url]     None
*
* [url=home.php?mod=space&uid=1543424]@Details[/url]    The function prints the source file name and line number where
*             the ASSERT_PARAM() error occurs, and then stops in an infinite loop.
*/
void AssertError(uint8_t * file, uint32_t line)
{

    printf("[%s] line %d : wrong parameters.\r\n", file, line);

    /* Infinite loop */
    while(1) ;
}
#endif
你知道这是干什么用的吗?

这段代码定义了一个名为 AssertError 的函数,该函数用于处理断言错误。断言是一种在程序中检查特定条件是否满足的机制,通常用于调试和确保程序的正确性。在这个函数中,它接受两个参数:file 和 line,分别表示发生错误的源文件名和行号。

这段代码中还包括了一个条件编译指令 #if USE_ASSERT。这意味着这段代码仅在满足 USE_ASSERT 宏定义为真(非零)时才会被编译进程序中。条件编译是一种在编译时选择性包含或排除代码的技术,通常用于根据不同的构建配置来控制代码的行为。

如果在编译程序时设置了 USE_ASSERT 宏,那么在程序中的某个地方发生断言失败时,将会调用 AssertError 函数。此函数的作用是打印错误消息,其中包括源文件名和行号,然后进入无限循环,以停止程序的执行。

在使用这段代码时,您需要在程序的某个地方定义或设置 USE_ASSERT 宏,以便启用断言功能。否则,这段代码将被编译器忽略,不会在程序中起作用。例如,可以在程序的某个头文件或源文件中添加以下行来定义 USE_ASSERT 宏:

#define USE_ASSERT 1  // 或者设置为任何非零值
然后,当您的程序中的某个地方需要进行断言检查时,可以使用如下的方式:
if (some_condition_is_false) {
    AssertError(__FILE__, __LINE__);
}
这将导致在断言失败时调用 AssertError 函数,该函数将打印出错误消息,并停止程序的执行。

使用特权

评论回复
沙发
天灵灵地灵灵|  楼主 | 2023-9-25 21:31 | 只看该作者
那么你用过这个函数的功能吗

使用特权

评论回复
板凳
tpgf| | 2023-10-12 14:05 | 只看该作者
断言目的为了表示与验证软件开发者预期的结果

使用特权

评论回复
地板
八层楼| | 2023-10-12 14:32 | 只看该作者
编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设

使用特权

评论回复
5
guanjiaer| | 2023-10-12 15:56 | 只看该作者
使用断言可以创建更稳定、品质更好且 不易于出错的代码

使用特权

评论回复
6
keaibukelian| | 2023-10-12 16:16 | 只看该作者
除了类型检查和单元测试外,断言还提供了一种确定各种特性是否在程序中得到维护的极好的方法

使用特权

评论回复
7
观海| | 2023-10-12 20:12 | 只看该作者
可以在测试时启用断言而在部署时禁用断言

使用特权

评论回复
8
caigang13| | 2023-10-12 20:52 | 只看该作者
这个在前期调试阶段很有用

使用特权

评论回复
9
heimaojingzhang| | 2023-10-12 22:33 | 只看该作者
当需要在一个值为FALSE时中断当前操作的话,可以使用断言

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

175

主题

3382

帖子

13

粉丝