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

Макрос compile_error!

Макрос compile_error! вызывает ошибку компиляции с указанным сообщением. Параметром макрос принимает строковый литерал, который будет выведен в качестве текста ошибки. Этот макрос чаще всего используется внутри условной компиляции cfg или в пользовательских макросах для генерации понятных сообщений об ошибках на этапе сборки.

Синтаксис

compile_error!("сообщение об ошибке")

Пример

Давайте вызовем макрос compile_error! внутри функции main и посмотрим, что произойдёт:

fn main() { compile_error!("this code should not compile"); }

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

error: this code should not compile

Пример

Чаще всего макрос compile_error! применяют вместе с cfg, чтобы запретить сборку на неподдерживаемой платформе. Давайте сгенерируем ошибку, если целевая архитектура не является 64-битной:

#[cfg(not(target_pointer_width = "64"))] compile_error!("this crate requires a 64-bit platform"); fn main() { println!("build is ok"); }

Если платформа 64-битная, код успешно компилируется и выводит:

"build is ok"

Пример

Давайте применим compile_error! внутри пользовательского макроса, чтобы выдать понятную ошибку при передаче неподходящего аргумента:

macro_rules! only_positive { ($n:expr) => { if $n < 0 { compile_error!("argument must be positive"); } }; } fn main() { only_positive!(5); println!("all checks passed"); }

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

"all checks passed"

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

  • макрос cfg!,
    который проверяет флаги конфигурации во время компиляции
  • атрибут cfg,
    который включает или исключает код условно
  • макрос macro_rules!,
    который позволяет создавать собственные макросы
  • макрос stringify!,
    который превращает выражение в строковый литерал
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить