assert (CRT)

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

void assert( 
   int expression 
);

参数

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

备注

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

assert 打印一个诊断消息,请 expression 计算结果为 false (0) 时将调用 中止 程序停止执行。 执行任何操作,如果 expression 是 true (非零)。 诊断消息包含失败的表达式、源文件的名称和断言失败的行号。

诊断消息。宽字符打印。 因此,它按预期工作,即使有该表达式的 Unicode 字符。

诊断消息的目标依赖于调用实例应用程序的类型。 控制台应用程序。 stderr始终接收消息。 在基于 windows 的应用程序, assert 调用 windows MessageBox 函数创建消息框与 按钮时显示消息。 当用户单击 时,程序中止。

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

有关调试的 CRT 的更多信息,请参见 调试技术的 CRT

assert 实例可在版本和调试 C 运行库的版本。 其他两个断言宏, _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 等效项

系统:: 诊断:: 调试:: 断言

请参见

参考

错误处理(crt)

处理和环境控件

abort

raise

signal

_ASSERT, _ASSERTE宏

_DEBUG