断言和用户提供的消息 (C++)

C++ 语言支持可帮助你调试应用程序的三个错误处理机制:#error 指令static_assert 关键字和 assert Macro, _assert, _wassert 宏。 所有的三种机制都会发出错误消息,其中两个还会测试软件断言。 软件断言指定在程序的某个特定点应满足的条件。 如果编译时断言失败,编译器将发出诊断消息和编译错误。 如果运行时断言失败,操作系统将发出诊断消息并关闭应用程序。

注解

应用程序的生存期由预处理、编译和运行时阶段组成。 每个错误处理机制都会访问在这三个阶段之一中可用的调试信息。 若要有效地调试,请选择提供有关该阶段的相应信息的机制:

  • #error 指令在预处理时有效。 它将无条件地发出用户指定的消息并导致编译因错误而失败。 该消息可包含由预处理器指令操作的文本,但不会计算任何生成的表达式。

  • static_assert 声明在编译时有效。 它将测试由用户指定且可以转换为布尔值的整数表达式表示的软件断言。 如果表达式的计算结果为零 (false),编译器将发出用户指定的消息,并且编译因错误而失败。

    static_assert 声明对调试模板尤其有用,因为模板自变量可包含在用户指定的表达式中。

  • assert Macro, _assert, _wassert 宏在运行时有效。 它会计算用户指定的表达式,如果结果为零,系统将发出诊断消息并关闭应用程序。 很多其他宏(如 _ASSERT 和 _ASSERTE)与此宏类似,但它们发出不同的系统定义或用户定义的诊断消息。

另请参阅

#error 指令 (C/C++)
assert 宏、_assert、_wassert
_ASSERT、_ASSERTE、_ASSERT_EXPR 宏
static_assert
_STATIC_ASSERT 宏
模板