assert (CRT)

Вычисляет выражение и, если результат false, выводит диагностическое сообщение и прерывает выполнение программы.

void assert( 
   int expression 
);

Параметры

  • expression
    Выражение (включая указатели), результат вычисления которого не является нулем или является нулем.

Заметки

Макрос assert обычно используется, чтобы определить логические ошибки во время разработки программ путем реализации аргумента expression таким образом, чтобы он вычислялся в false только при некорректной работе программы. После завершения отладки проверки утверждений можно отключить, не изменяя файл с исходным кодом, определив идентификатор NDEBUG. NDEBUG можно определить с помощью параметра командной строки /D или с помощью директивы #define. Если NDEBUG определен с использованием #define, директива должна присутствовать до включения ASSERT.H.

assert выводит диагностическое сообщение при expression равном false (0) и вызывает функцию abort, чтобы завершить выполнение программы. Если значение expression равно true, никаких действий не выполняется. Диагностическое сообщение включает проваленное выражение, имя файла исходного кода и номер линии, где было провалено утверждение.

Диагностическое сообщение выводится в расширенных символах. Таким образом, он будет работать ожидаемым образом, даже если в выражении содержатся символы юникода.

Назначение диагностического сообщения зависит от типа приложения, которое вызвало процедуру. Консольные приложения всегда получают сообщения через stderr. В приложении на основе Windows assert вызывает функцию Windows MessageBox для создания окна сообщения для отображения сообщения вместе с кнопкой ОК. Когда пользователь щелкает ОК, программа немедленно завершается.

Когда приложение выполняется с отладочной версией библиотеки среды выполнения, assert создает окно сообщения с тремя кнопками: Прервать, Повторить и Пропустить. Если пользователь нажимает кнопку Прервать, то выполнение программы немедленно прерывается. Если пользователь нажимает кнопку Повторить, вызывается отладчик, и пользователь может выполнить JIT-отладку программы, если JIT-отладка включена. Если пользователь нажимает кнопку Пропустить, assert продолжает нормальное выполнение: создает окно сообщения с кнопкой ОК. Обратите внимание, что нажатие на Игнорировать при существовании условия ошибки часто приводит к неопределенному поведению.

Дополнительные сведения об отладке CRT см. в разделе CRT Debugging Techniques.

Процедура 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

System::Diagnostics::Debug::Assert

См. также

Ссылки

Обработка ошибок (CRT)

Управление процессами и средой

abort

raise

signal

Макрос _ASSERT, _ASSERTE

_DEBUG