extern "C" {
    fn abs(input: i32) -> i32;
}

fn main() {
    unsafe {
        println!("Absolute value of -3 according to C: {}", abs(-3));
    }
}

Todas as chamadas feitas às funções expostas por meio do extern "C" o bloco deve ser envolvido em unsafepara garantir que você assuma a devida responsabilidade pelo que você envia e recebe de volta.

Alterando variáveis ​​estáticas mutáveis

Variáveis ​​globais ou estáticas em Rust podem ser definidas como mutableuma vez que ocupam um endereço de memória fixo. No entanto, só é possível modificar uma variável estática mutável dentro de uma unsafe bloquear.

As corridas de dados são o maior motivo pelo qual você precisa unsafe para alterar variáveis ​​estáticas mutáveis. Você obteria resultados imprevisíveis se permitisse que a mesma variável estática mutável fosse modificada de diferentes threads. Então, embora você possa usar unsafe para fazer tais mudanças, quaisquer problemas de corrida de dados seriam de sua responsabilidade, não da Rust. Em geral, a Rust não pode impedir totalmente as corridas de dados, mas você precisa ser duplamente cauteloso sobre isso unsafe blocos.