Экспорт (0) Печать
Развернуть все
and
div
eof
not
or
xor
Развернуть Свернуть
Данная статья переведена автоматически. Наведите указатель мыши на предложения статьи, чтобы просмотреть исходный текст. Дополнительные сведения.
Перевод
Текст оригинала

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
}
Analyzing string 'abc'
Analyzing string '(null)'
Assertion failed: string != NULL, file crt_assert.c, line 24

Приложение потребовало от среды выполнения завершить работу ненормальным образом.
Для получения дополнительных сведений обратитесь в службу поддержки приложения.

Добавления сообщества

ДОБАВИТЬ
Корпорация Майкрософт проводит интернет-опрос, чтобы выяснить ваше мнение о веб-сайте MSDN. Если вы желаете принять участие в этом интернет-опросе, он будет отображен при закрытии веб-сайта MSDN.

Вы хотите принять участие?
Показ:
© 2014 Microsoft