Макрос 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!,
который превращает выражение в строковый литерал