断言是一个条件,作为程序员,您希望在程序中的给定点明确地为真。许多编程语言为您提供了一种断言条件的方法,作为程序员,您可以使用断言在许多问题发生之前发现和诊断它们。
例如,如果在程序中的特定点,您期望一个名为a
be的变量0
,您可以编写:
assert(a == 0);
如果在运行时,a
不在0
程序的那个特定部分,你会得到一个人为的错误,调试器会停在那里,这样你就可以诊断你的问题,并理解为什么a
不是0
。
一个非常常见的断言就像
assert(some_pointer != NULL); // We already checked this before
在您的具体示例中,调用的变量pred_dir
应小于或等于2
。如果你在那里得到一个断言错误,这意味着由于某种原因,pred_dir
大于2
. 由于程序的其余部分没有预料到这一点,因此继续进行是没有意义的,程序将停在那里。
请记住,断言是帮助您实现“健全性检查”的调试辅助工具,而不是向用户显示错误的一种方式。因此,鼓励您在制作程序时使用大量它们,以确保您对程序状态的所有假设都是正确的。如果你的程序是正确的,断言永远不应该停止程序。
由于断言是一种调试辅助,因此在发布程序以分发给用户时检查它们是没有意义的。因此,许多程序员在这样做时会关闭断言检查。许多环境(如 Visual Studio)在创建发布版本时会自动关闭它们。
检查维基百科文章,因为它更详细地解释了断言。
如果在已发布的产品或第三方库上触发了断言,则很可能意味着该程序中存在错误。如果您能够重现该问题,请将其报告给程序的作者。