在 C++ 中将消息添加到断言

Zeeshan Afridi 2023年10月12日
  1. C++ 中的断言
  2. C++ 中断言的优点
  3. 在 C++ 中的 Assert 中显示自定义消息
  4. 在 C++ 中自定义 Assert 中的自定义消息
  5. 结论
在 C++ 中将消息添加到断言

断言是 C++ 中的错误处理机制之一,可帮助开发人员和测试人员调试和测试应用程序。

这些是布尔表达式,使用程序中逻辑表达式的测试,如果没有检测到错误,则返回 true;否则,程序终止,并显示错误。

当我们有一些约束需要满足才能正常运行或以其他方式终止时使用它。

cpp 断言

C++ 中的断言

假设汽车的速度不应小于 0 且大于光速。

Assert(speed<0 && speed> speed_of_light)
  1. 我们在这个表达式中有两个不应该违反的约束。
  2. 经验表明,编程中的断言是检测和纠正程序错误的最有效和最快捷的方法之一。
  3. 经验表明,在编程时编写断言是检测和纠正错误的最快和最有效的方法之一。

断言是用于评估程序中的条件表达式的预处理器宏。

Assert(Condition)

    assert(x < 10)

这个表达式告诉我们 x 应该小于 10 才能顺利运行;否则,程序将被终止并抛出错误。

例如,我们正在运行一个具有两个条件路径的程序:truefalse。对于 true 路径,程序将顺利运行而不会抛出错误,而在 false 路径中,程序将终止并显示错误。

错误通常由失败的条件表达式、程序的路径和发生错误的行号组成。

这有助于我们了解错误的发生,从而使测试和调试更加高效和容易。

代码示例:

#include <cassert>

int main() {
  int x = 3;
  x = 7;
  assert(x == 3);
  return 0;
}

输出:

Assertion failed: x==3, file E:\Client Project \Codes\assertCodes.cpp,, line 7

C++ 中断言的优点

断言是非常有效和方便的错误处理机制,可以帮助我们以多种方式检测代码中的错误。它采用了测试驱动的方式,即在开发之前编写测试用例,然后根据测试用例开始开发。

同样,我们在 assert 宏中编写了一些代码,程序应该通过它而不会导致错误。

在测试和调试中使用断言的一些优点。

  1. 断言帮助我们进行错误检测。
  2. 它提供了更好的可观察性。
  3. 它还可以帮助我们通过行号识别错误原因和错误路径。
  4. 可以添加自定义错误信息;其他测试人员和程序员也可以更人性化地理解错误。
  5. 它帮助我们建立无错误的逻辑。
  6. 高效的测试和调试。

在 C++ 中的 Assert 中显示自定义消息

我们还可以使用方法在 assert 宏中显示自定义消息,这是一个有效且方便的选项。它以更人性化的方式指示和解释错误。

小型团队在大型软件组织中致力于软件的每个部分,有些是设计,有些是编码和测试。因此,编写带有自定义消息的断言宏对于其他人分析和理解错误的性质和原因非常有帮助。

代码示例:

#include <cassert>

int main() {
  int dividend = 4;
  int divisor = 0;
  assert(("Message: Anything divided by 0 is undefined", divisor != 0));
  int divison = dividend / divisor;
  return 0;
}

输出:

Assertion failed: ( "Message: Anything divided by 0 is undefined", divisor != 0), file E:\Client Project \Codes\assertCodes.cpp,, line 6

在这个程序中,我们将 4 除以 0 (4/0),但正如我们所知,我们不能将任何数字除以 0,因此正如预期的那样,这将引发错误。为了提高错误的可读性,我们添加了一条自定义消息。

在 C++ 中自定义 Assert 中的自定义消息

#include <cassert>
#include <iostream>
using namespace std;
bool print_if_false(const bool assertion, const char* message) {
  if (!assertion) {
    cout << message << endl;
  }
  return assertion;
}
int main() {
  int dividend = 4;
  int divisor = 0;
  assert(print_if_false(divisor != 0,
                        "Message: Anything divided by 0 is undefined"));
  return 0;
}

输出:

Message: Anything divided by 0 is undefined
Assertion failed: print_if_false(divisor != 0,"Message: Anything divided by 0 is undefined" ), file E:\Client Project \Codes\assertCodes.cpp, line 18

这与上面的示例相同,但它是自定义的。功能总体上是一样的。

我们创建了自定义函数以在单独的行上显示消息。

目的是提高可读性并了解我们如何自定义断言宏来显示自定义消息。

结论

在本文中,我们了解了 C++ 中的 assert() 语句、它的工作原理以及 assert() 的优点。除此之外,我们还看到了 assert() 的语法以及如何显示自定义消息以提高错误的可读性。

作者: Zeeshan Afridi
Zeeshan Afridi avatar Zeeshan Afridi avatar

Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.

LinkedIn