这可能是一个巨大的菜鸟问题,但我对C相对较新,并且使用'断言'。
说我正在构建一个大型程序,并且有一个void函数test(),它接受一个数组并对数组执行一些操作。
现在,当我构建这个程序时,我想确保我的函数的所有输入都是有效的,所以我想确保传入test()的数组是有效的(即不是null let& #39; s说)。
我可以这样写:
if (array == NULL) return;
然而,当我测试并且它刚刚返回时,我很难知道我的方法是否成功操作我的数组,除非我检查数组本身。在这种情况下添加断言以确保我的条件用于我自己的调试目的是正常的做法吗?我听说断言不是为生产代码编译的,所以断言只是为了帮助我,程序员,测试和调试。同时使用if语句和断言似乎有点奇怪,但我不知道if语句如何快速让我知道我的测试方法是否成功,而且我也不知道断言是怎样的生产代码的有效检查。所以看起来他们都需要?
答案 0 :(得分:2)
如果你的函数的契约是它需要一个有效的指针,那么当传递null或其他无效指针时,最好的行为就是大声崩溃。一般情况下,您无法测试指针的有效性,但对于空指针,取消引用它们无论如何都会在大多数系统上崩溃。 assert
将是记录此问题并确保崩溃(除非定义NDEBUG
)以帮助诊断使用错误的适当方式。
更改功能以返回错误状态不是一个好主意。它使界面变得复杂,并且直到稍后才会忽略合同违规(如果调用者没有检查返回值,则根本不会注意到)。