Avatar ·

O que são atributos de crate em Rust e onde adicioná-los no código?

Olá a todos! Acabei de começar a aprender Rust e estou tentando entender os atributos de crate. Na documentação oficial, diz que existem alguns atributos que se aplicam a todo o crate, mas não entendo o que isso significa e onde colocá-los. Tenho um projeto simples que criei com `cargo new my_project`. Dentro, há um arquivo `main.rs` com a função `main`. Li que posso usar o atributo `#![allow(unused_variables)]` para o compilador não reclamar de variáveis não utilizadas. Mas quando escrevi: ```rust #![allow(unused_variables)] fn main() { let x = 5; let y = 10; println!("Hello!"); } ``` O compilador emitiu um aviso de que o atributo não se aplica a uma expressão. Tentei usar `#[allow(unused_variables)]` (com um ponto de exclamação), e então o aviso desapareceu apenas para uma expressão, não para o arquivo inteiro. Qual é a diferença entre `#![...]` e `#[...]`? Por que meu atributo não funcionou como um atributo de crate? E onde exatamente devo adicioná-lo?