C/C++ 断言

2025年3月17日 | 阅读 3 分钟

什么是断言?

断言是代码的集合,我们在其中放置一些表达式或条件来检查条件是否为真,或者表达式是否存在。

  • 如果条件为真或表达式存在,那么我们将得到真值或整数值 1,并且程序的下一行将轻松执行。
  • 但是,如果断言中的条件为假或不存在,它将返回假,作为整数,它将返回 0,并且我们的程序将终止。

'assert()' 关键字用于断言中,我们在其中放置用于求值的表达式。断言的表达式可能与程序员对任何变量或代码的任何语句的假设有关。

例如,如果我们想检查任何变量的值在程序执行期间是否已更改为其他值,那么我们可以借助断言进行假设。

语法

C 示例 1

输出

Assertions in C/C++

说明

在上面的代码中,我们有一个变量,它被初始化为值 65。之后,我们给这个变量加上了 6,所以现在它的值是 71。现在我们从它减去了 45,所以现在它的值是 26。

现在在断言条件中,我们放置了表达式,即变量的值是否等于 45。因此,它将返回 0,因为它是一个假条件,并且我们的程序将被中止,并且代码的后续行将不会运行。

C 示例 2

输出

Assertions in C/C++

说明

在上面的代码中,我们在断言中放置了一个条件,即如果变量等于 26,这将是真,它将返回 1。因此,代码的下一行将顺利运行,没有任何问题。

由于断言与错误处理非常相似,如果存在错误,我们可以进行错误处理并终止程序;否则,代码的其余部分将顺利运行,没有任何问题。

但是断言和普通错误处理之间有很多区别

  1. 断言通常用于逻辑上不正确的条件,而在错误处理中,我们处理代码中不同类型的错误。
  2. 断言可以在运行时被忽略或禁用,但这在错误处理中是不可能的。
  3. 错误处理始终被认为是编写代码的更好方式,而对于正常情况,编写断言不是一个好主意,因为它会严重影响程序。

如果代码中存在断言,我们也可以在编译时忽略它。我们必须导入预处理器指令 NDEBUG

C 示例 3

输出

Assertions in C/C++

说明

在上面,变量的值是 26,断言中的条件是假的。但是,程序不会终止,因为我们已经导入了预处理器指令 NDEBUG,并且断言已成功忽略。

还有静态断言的概念,它在编译时运行,而 assert() 仅在运行时使用。静态断言只在 C++ 中可能。C 中不存在。

C++ 示例

输出

Assertions in C/C++

说明

静态断言在编译时检查,因此它将给出编译时错误,表示静态断言中的表达式不正确。此代码中也存在普通断言,但它仅在运行时检查。