gpt4 book ai didi

c - 处理 void 函数输入检查的最佳实践

转载 作者:太空宇宙 更新时间:2023-11-03 23:23:41 25 4
gpt4 key购买 nike

这可能是一个非常菜鸟的问题,但我对 C 和使用“断言”还比较陌生。

假设我正在构建一个大型程序并且有一个 void 函数 test(),它接受一个数组并对数组执行一些操作。

现在,当我构建这个程序时,我想确保我的函数的所有输入都是有效的,所以我想确保传递给 test() 的数组是有效的(也就是说,不是 null) .

我可以这样写:

 if (array == NULL) return;

但是,当我正在测试并且它刚刚返回时,除非我检查数组本身,否则很难知道我的方法是否成功地操作了我的数组。在这种情况下添加断言以确保我自己的调试目的的条件是正常的做法吗?我听说 assert 没有为生产代码编译,所以 assert 只会帮助我,程序员,测试和调试。同时拥有 if 语句和断言似乎有点奇怪,但我不明白 if 语句如何快速让我知道我的测试方法是否成功,而且我不明白断言如何成为一个有效的检查生产代码。所以看起来他们都需要?

最佳答案

如果您的函数的契约是它需要一个有效的指针,那么最好的行为是在传递空指针或其他无效指针时大声崩溃。一般情况下,您无法测试指针的有效性,但在空指针的情况下,取消引用它们无论如何都会在大多数系统上崩溃。 assert 将是记录此问题并确保崩溃(除非定义了 NDEBUG)以帮助诊断使用错误的适当方式。

更改您的函数以返回错误状态不是一个好主意。它使接口(interface)变得复杂,并让违反契约的行为直到后来才被注意到(如果调用者不检查返回值,则根本不会被注意到)。

关于c - 处理 void 函数输入检查的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32556651/

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