📜  断言 C++ (1)

📅  最后修改于: 2023-12-03 14:55:03.803000             🧑  作者: Mango

断言 C++

断言是一种用于在程序运行期间检查代码预期行为的方法。在 C++ 中,断言通常用于在代码中添加条件检查,并在错误发生时强制程序退出。

使用断言

在 C++ 中,断言通常遵循以下格式:

assert(expression);

其中,expression 是要检查的条件。如果 expression 为假,则程序会在此处停止执行,并打印出一条错误消息。这可以帮助程序员更快地发现和修复代码中的错误。

例如,以下代码段使用断言检查了一个数组中的索引是否在有效范围内:

int arr[10] = {0};
int i = 11;
assert(i >= 0 && i < 10);
cout << arr[i] << endl;

在此代码中,断言会检查 i 是否大于等于 0 且小于 10。由于 i 的值为 11,所以断言将会触发,并停止程序执行。

使用 NDEBUG 禁用断言

在开发阶段使用断言非常有用,但在发布之后,有时需要禁用断言以提高程序运行速度。为此,标准头文件 <cassert> 定义了一个预处理器宏 NDEBUG,可以使用该宏禁用断言。

NDEBUG 被定义时,所有的 assert 语句都将被忽略。以下是一个示例:

#include <cassert>
// #define NDEBUG

int main()
{
    int arr[10] = {0};
    int i = 11;
    assert(i >= 0 && i < 10);
    cout << arr[i] << endl;
    return 0;
}

在此代码中,NDEBUG 被注释了。因此,assert 语句会被执行,触发断言错误并停止程序。如果将 NDEBUG 定义为以下语句,那么 assert 语句将被忽略,程序会正常运行:

// #define NDEBUG
#include <cassert>

int main()
{
    int arr[10] = {0};
    int i = 11;
    assert(i >= 0 && i < 10);
    cout << arr[i] << endl;
    return 0;
}
总结

断言是一种用于在程序运行期间检查代码预期行为的强有力工具。在 C++ 中,使用标准头文件 <cassert> 中的 assert 函数来添加断言。为了禁用断言,请使用预处理器宏 NDEBUG