Поделиться через


Утверждения

Обновлен: Ноябрь 2007

Этот раздел применим к:

Выпуск

Visual Basic

C#

C++

Web Developer

Экспресс-выпуск

Тема не применяется Тема не применяется

Только машинный код

Тема не применяется

Standard

Тема не применяется Тема не применяется

Только машинный код

Тема не применяется

Pro и Team

Тема не применяется Тема не применяется

Только машинный код

Тема не применяется

Обозначения:

Тема применяется

Применяется

Тема не применяется

Неприменимо

Тема применяется, но команда по умолчанию сокрыта

Команда или команды скрытый по умолчанию.

Оператор утверждения задает условия, которые должны выполняться на определенных этапах работы программы. Если эти условия не выполняются, утверждение признается ложным, выполнение программы прерывается и появляется диалоговое окно "Сбой утверждения".

Язык Visual C++ поддерживает операторы утверждений на основе следующих конструкций:

Утверждения можно использовать в следующих целях:

Утверждения MFC и библиотеки времени выполнения C

Когда отладчик останавливается из-за утверждения MFC или библиотеки времени выполнения C, он перемещается к той точке в исходном файле, где сработало утверждение (если исходник доступен). В окне "Вывод" наряду с сообщением утверждения появляется и диалоговое окно Сбой утверждения. Это сообщение можно скопировать из окна Вывод в текстовое окно, если нужно сохранить его для дальнейшего использования. В окне Вывод могут содержаться и другие сообщения об ошибках. Следует тщательно проверять эти сообщения, потому что они могут объяснить причину сбоя утверждения.

Если правильно использовать утверждения в коде, можно перехватить много ошибок еще на этапе разработки. Рекомендуется написать утверждение для каждого сделанного предположения. Если предполагается, что аргумент не равен NULL, используйте оператор утверждения для проверки этого предположения.

_DEBUG

Операторы утверждений компилируются, только если определен _DEBUG. Если _DEBUG не определен, компилятор обрабатывает утверждения как пустые операторы. Таком образом, операторы утверждений в окончательном выпуске не приводят к дополнительным затратам; их свободно можно использовать в коде, не опасаясь снижения производительности окончательной версии программы. Также при использовании утверждений отпадает необходимость в директивах #ifdef.

Побочные эффекты использования утверждений

При добавлении утверждения в код следует убедиться, что это не вызовет побочных эффектов. Рассмотрим следующий пример:

ASSERT(nM++ > 0); // Don't do this!

Поскольку выражение ASSERT не оценивается в окончательном выпуске программы, nM будет иметь различные значения в отладочной версии и в окончательной версии. В MFC макрос VERIFY можно использовать вместо ASSERT. VERIFY оценивает выражение, но не проверяет результат в версии выпуска.

Следует быть особенно осторожным при вызовах функций в операторах утверждений, так как оценка функции может вызвать неожиданные побочные эффекты.

ASSERT ( myFnctn(0)==1 ) // unsafe if myFnctn has side effects
VERIFY ( myFnctn(0)==1 ) // safe

Макрос VERIFY вызывает myFnctn как в отладочной, так и в окончательной версии, поэтому им можно свободно пользоваться. Однако в версии выпуска дополнительные затраты все же могут возникать в связи с вызовом ненужных функций.

См. также

Основные понятия

Безопасность отладчика

Ссылки

Утверждения в управляемом коде

Другие ресурсы

Отладка машинного кода