是的,unreachable!
macro(也有unimplemented!
)纯粹是为了清晰起见.他们是implemented直接转发到panic!
.
#[macro_export]
#[stable(feature = "rust1", since = "1.0.0")]
macro_rules! unreachable {
() => ({
panic!("internal error: entered unreachable code")
});
($msg:expr) => ({
unreachable!("{}", $msg)
});
($fmt:expr, $($arg:tt)*) => ({
panic!(concat!("internal error: entered unreachable code: ", $fmt), $($arg)*)
});
}
#[macro_export]
#[stable(feature = "rust1", since = "1.0.0")]
macro_rules! unimplemented {
() => (panic!("not yet implemented"))
}
不要与unreachable
intrinsic(可通过unreachable
或debug_unreachable
crate 在稳定的 rust 迹中接近)混淆,后者不安全地断言分支完全不可接近.这允许在优化时完全删除分支.如果断言被证明是错误的,那么它可能会导致未定义的行为,相比之下,unreachable!()
只会让人panic .