Macro std::compile_error

1.20.0 · source ·
macro_rules! compile_error {
    ($msg:expr $(,)?) => { ... };
}
Expand description

导致编译失败,并遇到给定的错误消息。

当 crate 使用条件编译策略为错误条件提供更好的错误消息时,应使用此宏。

它是 panic! 的编译器级别的形式,但在 编译 而不是 运行时 会发出错误。

Examples

宏和 #[cfg] 环境就是两个这样的示例。

如果宏传递了无效值,则发出更好的编译器错误。 没有最终分支,编译器仍然会发出错误,但是错误消息不会提及两个有效值。

macro_rules! give_me_foo_or_bar {
    (foo) => {};
    (bar) => {};
    ($x:ident) => {
        compile_error!("This macro only accepts `foo` or `bar`");
    }
}

give_me_foo_or_bar!(neither);
// ^ 将在编译时失败,并显示消息 "This macro only accepts `foo` or `bar`"
Run

如果许多特性之一不可用,则发出编译器错误。

#[cfg(not(any(feature = "foo", feature = "bar")))]
compile_error!("Either feature \"foo\" or \"bar\" must be enabled for this crate.");
Run