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


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

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

Заметки

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

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

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

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

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

См. также

Ссылки

Директива #error (C/C++)

assert (CRT)

Макрос _ASSERT, _ASSERTE

static_assert

Макрос _STATIC_ASSERT

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

Шаблоны