#panic #operator #div #occurs

nopanick

Rust 中加、减、乘、除运算符的无恐慌库

4 个版本

0.2.0 2023年11月11日
0.1.7 2023年1月30日

#4 in #div

MIT/Apache

9KB
73

nopanick-rs (无恐慌!)

Rust 中加、减、乘、除运算符的无恐慌库。

示例

use nopanick::*;

fn main() {
    unsafe {
        println!("{}", div!(sub!(add!(100i32, 10i32), 5i32), 5i32));
    }
}

构建

仅发布以优化效果

cargo build --release

联系我


lib.rs:

nopanick-rs (无恐慌!)

Rust 中加、减、乘、除运算符的无恐慌库。

生成更少的指令,适合裸机或嵌入式系统。

示例#1

use nopanick::*;

fn main() {
    unsafe {
        println!("{}", div!(sub!(add!(100i32, 10i32), 5i32), 5i32));
    }
}

示例#2

如何使用 .unwarp_nop()with Option<T>

use nopanick::*;

fn rem(a: u32, b: u32) -> Option<u32> {
    if b != 0 {
        Some(a % b)
    } else {
        None
    }
}

fn main() {
    let a = 4u32;
    let b = 3u32;
    let r = unsafe { rem(a, b).unwrap_nop() };

    println!("{} % {} ={}", a, b, r);
}

示例#3

如果解包了 None,则会发生未定义行为 (UB)。

use nopanick::*;

fn rem(a: u32, b: u32) -> Option<u32> {
    if b != 0 {
        Some(a % b)
    } else {
        None
    }
}

fn main() {
    let a = 4u32;
    let b = 0u32;
    let r = unsafe { rem(a, b).unwrap_nop() };

    println!("{} % {} ={}", a, b, r);
}
//error: process didn't exit successfully: `target\debug\examples\option.exe` (exit code: 0xc000001d, STATUS_ILLEGAL_INSTRUCTION) Illegal instruction

无运行时依赖