#panic #static-assert #static-check

无std unreachable_checked

类似于unreachable!()的宏,会导致链接错误而不是panic。可用于静态确保某些代码不会panic。

2个不稳定版本

使用旧的Rust 2015

0.2.0 2023年4月1日
0.1.0 2023年4月1日

#1941 in Rust模式

每月23次下载

MITNFA许可协议

7KB
86 代码行

unreachable_checked!

Kixunil/dont_panic的分支,使用unreachable!代替panic!

确保代码在编译时不会panic。

示例

此代码可以编译并(不)运行得很好

let should_panic = false;
if should_panic {
    unreachable_checked!("This will never execute.");
}

然而,此代码将导致链接错误

let should_panic = true;
if should_panic {
    unreachable_checked!("This will never execute.");
}

注意事项

  • 这仅在指定了适当的opt_level时才有效 - 可能需要发布构建。您可以使用panic cargo功能来代替panic
  • 错误消息是一个奇怪的链接错误。您不会得到行号等。
  • 可能存在您知道代码不可达但编译器无法证明的情况。

lib.rs:

此crate提供宏,看起来就像unreachable!(),但它们不是panic,而是在其调用未被优化掉时引发链接错误。这可以用来确保编译器优化掉某些代码。

示例

#[macro_use]
extern crate unreachable_checked;

fn main() {
/*
    let x = 6 * 9;
    if x == 42 {
        unreachable_checked!("6 * 9 == 42");
    }
*/
let x = false;
if x {
    unreachable_checked!("42");
}
}

使用--release--features=panic编译

无运行时依赖

功能