РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
49 of 1245 menu

Макрос unreachable!

Макрос unreachable! используется для обозначения кода, который по логике программы никогда не должен выполняться. Если выполнение всё же доходит до этого места, макрос вызывает панику с сообщением internal error: entered unreachable code. Макрос может принимать необязательное сообщение, которое будет выведено при панике. Это удобно для отладки и документирования предположений о работе программы.

Макрос часто применяется в местах, где компилятор не может самостоятельно доказать недостижимость кода, например, после исчерпывающей проверки всех вариантов в match, или в ветках, которые невозможны по логике алгоритма. В отличие от panic!, макрос unreachable! явно сообщает о намерении программиста: этот код не должен выполняться никогда.

Синтаксис

unreachable!(); unreachable!("сообщение"); unreachable!("сообщение {}", аргумент);

Пример

Давайте рассмотрим простой пример, где значение переменной гарантированно находится в известном диапазоне, и все варианты обработаны:

fn main() { let x = 2; match x { 1 => println!("one"), 2 => println!("two"), 3 => println!("three"), _ => unreachable!(), } }

Результат выполнения кода:

"two"

Пример

Давайте посмотрим, что произойдёт, если выполнение всё же дойдёт до макроса unreachable! с пользовательским сообщением:

fn main() { let x = 5; match x { 1 => println!("one"), 2 => println!("two"), 3 => println!("three"), _ => unreachable!("unexpected value: {}", x), } }

Результат выполнения кода:

thread 'main' panicked at 'unexpected value: 5', src/main.rs:10:9 note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

Смотрите также

  • макрос todo!,
    который помечает код как ещё не реализованный
  • макрос unimplemented!,
    который помечает код как нереализованный
  • оператор match,
    который часто используется вместе с unreachable!
  • оператор return,
    который выполняет досрочный выход из функции
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить