assert (CRT)

则结果是,false打印一个诊断消息并中止程序时,计算表达式。

void assert( 
   int expression 
);

参数

  • expression
    计算表达式 (包含指针)为非0或 0。

备注

实现 expression 参数通常使用 assert 宏确定逻辑错误。程序开发过程计算为 false,只有程序没有正确运行时。 在调试完成后,检查断言可能已关闭,而不修改源文件。定义标识符 NDEBUG。 NDEBUG 可以定义 /D 与命令行选项或 #define 指令。 如果 NDEBUG 使用 #define定义,必须在指令出现,ASSERT.H 是包括的过程。

assert 打印一个诊断消息,而 expression 的计算结果为 false (0) 时将调用 中止 终止程序执行。 如果 expression 为 true,则不执行任何操作。 诊断消息包括不合格的表达式、源文件中的断言发生失败的名称和行号。

诊断消息中宽字符输出。 因此,它按预期工作,即使在表达式的 Unicode 字符。

诊断消息的目标依赖于调用例程应用程序的类型。 控制台应用程序通过 stderr始终接收消息。 在基于 Windows 的应用程序,调用 assert 函数以及 确定 Windows 消息框 创建消息框按钮时显示一条消息。 当用户单击 确定时,中止程序。

当应用程序将与运行库的调试版本时,assert 将创建带有三个按钮的消息框:中止重试忽略。 如果用户单击 中止,中止程序。 如果用户单击 重试,调试器调用,而且用户可以调试程序,如果实时 (JIT) 启用调试。 如果用户单击 忽略assert 继续其常规执行:创建具有 确定 按钮的消息框。 请注意,当错误条件存在导致“通常未定义的行为时”,单击 。

有关 IntelliTrace 调试的更多信息,请参见zh712wwf(v=vs.120).md

assert 例程可在发布版本和调试 C 运行库的版本。 其他两 ASSERT 宏,_ASSERT _ASSERTE和,还可用,但是,它们才计算表达式传递给它们,在 _DEBUG 标志定义时。

要求

例程

必需的标头

assert

<assert.h>

示例

在程序中,analyze_string 函数使用 assert 函数测试几个条件关联的字符串和长度。 如果满足任意条件失败时,程序打印消息指示会导致失败。

// crt_assert.c
// compile with: /c
#include <stdio.h>
#include <assert.h>
#include <string.h>

void analyze_string( char *string );   // Prototype

int main( void )
{
   char  test1[] = "abc", *test2 = NULL, test3[] = "";

   printf ( "Analyzing string '%s'\n", test1 ); fflush( stdout );
   analyze_string( test1 );
   printf ( "Analyzing string '%s'\n", test2 ); fflush( stdout );
   analyze_string( test2 );
   printf ( "Analyzing string '%s'\n", test3 ); fflush( stdout );
   analyze_string( test3 );
}

// Tests a string to see if it is NULL, 
// empty, or longer than 0 characters.
void analyze_string( char * string )
{
   assert( string != NULL );        // Cannot be NULL
   assert( *string != '\0' );       // Cannot be empty
   assert( strlen( string ) > 2 );  // Length must exceed 2
}
  

.NET Framework 等效项

System::Diagnostics::Debug::Assert

请参见

参考

错误处理 (CRT)

进程和环境控制

abort

raise

signal

_ASSERT、_ASSERTE 宏

_DEBUG