gpt4 book ai didi

c - 我们什么时候应该在 C 中使用断言?

转载 作者:行者123 更新时间:2023-11-30 16:13:58 25 4
gpt4 key购买 nike

我正在用 C 语言编写一个函数。就风格而言,与返回错误代码相比,什么时候使用断言比较好。假设该函数正在除两个数字。我应该断言除数非零还是应该返回错误代码?如果可以的话,请提供更多示例,以明确区分。

最佳答案

assert 中止进程,但当使用 -DNDEBUG 编译程序时,会变成无操作,因此它是一个相当粗糙的调试工具,无非就是那。您应该只使用 assert 来检查“不可能发生”的情况,例如违反算法的不变量或后置条件,但可能用于输入验证(当然不在库中)。当检测到客户端的无效输入时,请保持友好并返回错误代码。

assert 的一个示例用法可能是:您已经实现了一个非常智能的排序算法,并且您想要检查它是否真的排序。由于排序函数应该“正常工作”,因此不会返回值,因此您无法在不更改 API 的情况下添加错误返回。

void sort(int *a, size_t n)
{
recursive_super_duper_sort(a, 0, n);
assert(is_sorted(a, n));
}

static bool is_sorted(int const *a, size_t n)
{
for (size_t i=0; i<n-1; i++)
if (a[i] > a[i+1])
return false;

return true;
}

从长远来看,您确实需要一个适合此类事情的单元测试框架,而不是 assert,但它作为临时调试工具很有用。

关于c - 我们什么时候应该在 C 中使用断言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57847438/

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