Утверждение и сообщения об ошибках, предоставленные пользователем (C++)

Язык C++ поддерживает три механизма обработки ошибок, которые помогают отладить приложение: директиву #error, static_assert ключевое слово и макрос assert, _assert _wassert. Все три механизма создают сообщения об ошибках, а два их них также проверяют утверждения программного обеспечения. Программное утверждение определяет условие, которое должно выполняться на определенном этапе работы программы. Если утверждение времени компиляции ложно, компилятор создает диагностическое сообщение и ошибку компиляции. Если утверждение времени выполнения ложно, операционная система выводит диагностическое сообщение и закрывает приложение.

Замечания

Жизненный цикл приложения состоит из этапа предварительной обработки, этапа компиляции и этапа времени выполнения. Каждый механизм обработки ошибок обращается к отладочной информации, доступной в ходе одного из этих этапов. Для эффективной отладки выберите механизм, обеспечивающий требуемую информацию об этом этапе.

  • Директива #error действует во время предварительной обработки. Она безусловно выводит определенное пользователем сообщение и вызывает сбой компиляции с ошибкой. Сообщение может содержать текст, управляемый директивами препроцессора, но никакие результирующие выражения не вычисляются.

  • Объявление static_assert действует во время компиляции. Оно проверяет утверждения программного обеспечения, которые определяются заданным пользователем целочисленным выражением, допускающим преобразование в логическое значение. Если выражение равно нулю (ложно), компилятор выдает определенное пользователем сообщение и компиляция завершается сбоем с ошибкой.

    Объявления static_assert особенно полезны для отладки шаблонов, так как аргументы шаблона можно включать в определенное пользователем выражение.

  • Макрос утверждения, _assert, _wassert макрос действует во время выполнения. Он вычисляет определенное пользователем выражение, и если результат равен нулю, система выводит диагностическое сообщение и закрывает приложение. Многие другие макросы, такие как_ASSERT и _ASSERTE, похожи на этот макрос, но выдают различные системные или пользовательские диагностические сообщения.

См. также

Директива #error (C/C++)
Макрос assert, _assert, _wassert
Макросы _ASSERT, _ASSERTE, _ASSERT_EXPR
static_assert
Макрос _STATIC_ASSERT
Шаблоны