Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.

  1. todo! e unimplemented!
  2. file!, line!
  3. dbg!, unreachable!, include_str/byte
  4. derive, cfg!/#cfg
  5. macro customizada

A linguagem Rust possui um conjunto de macros nativas que ajudam no desenvolvimento de nossos programas escritos nessa linguagem. Nesta parte vamos ver as macros mais comuns utilizadas para diferentes fins:

  1. print!
  2. println!
  3. format!
  4. eprintln!
  5. eprint!
  6. todo!
  7. unimplemented
  8. dgb!
  9. unreachable!
  10. matches!
  11. outras

A macro println! já foi vista em saída de dados. Essa macro é utilizada para exibir informações na saída padrão. Ver saída de dados.

Sintaxe:
println!(string_formatada, <argumentos>)
Exemplo 1
fn main() 
{
println!("Olá!");
println!("Valor: {}", 999);

}
Saída
Olá
Valor: 999

Semelhante à macro println!, mas não imprime uma nova linha após a exibição do(s) argumento(s). Ver saída de dados.

Sintaxe:
print!(string_formatada, <argumentos>)
Exemplo 2
fn main() 
{
  print!("Uma string");
  print!(" {}", "rústica");
}
Saída
Uma string rústica

Essa macro é utilizada para criar uma string formatada com suporte a caracteres de escape, argumentos indexados e outros recursos. Ver formatação de dados.

Sintaxe:
format!(string_formatada,<argumentos>);
Exemplo 3
fn main() 
{
  let _str = format!("Olá, {}!", "nome_usuario");
  println!("{}",_str)
}
Saída
Olá, nome_usuario

Semelhante à macro println!, mas a informação é exibida na saída padrão de erro(stderror). Essa macro pode ser usada para debug, por exemplo.

Sintaxe:
eprintln!(string_formatada, <argumentos>)
Exemplo 4
fn main() 
{
    eprintln!("Erro: ");
    eprintln!("método não implementado");
}
Saída
Erro:
Método não implementado

Semelhante à eprintln!, mas não imprime uma nova linha após a exibição dos argumentos.

Sintaxe:
eprint!(string_formatada, <argumentos>)
Exemplo 5
fn main() 
{
    eprint!("Erro: ");
    eprint!("método não implementado");
}
Saída
Erro: Método não implementado

Com essas macros, podemos indicar ou marcar um local no código como não implementado ou que precisa ser implementado. Um panic(erro) é gerado exibindo uma mensagem que é passada como argumento para as macros.

Sintaxe:
todo!(mensagem);
unimplemented!(mensagem);

Caso uma mensagem não seja passada como argumento, "not yet implemented" será exibida para todo! e "not implemented" será exibida para unimplemented!.

Exemplo 6
fn funcao()
{
  todo!(); //comentar
}

fn main() 
{
    funcao();
}
Saída
thread 'main' (13) panicked at src/main.rs:3:3:
not yet implemented
Exemplo 7
fn funcao()
{
  unimplemented!("o estagiário deve implementar");
}
fn main() 
{
    funcao();
}
Saída
thread 'main' (43) panicked at src/main.rs:4:3:
not implemented: o estagiário deve implementar

As macros file!, line!, column! e module_path! retornam as informações: nome do arquivo, linha, coluna e caminho do módulo para log ou debug, por exemplo.

Sintaxe:
file!()
line()!
column!()
module_path!()
Retorno:
file!: &'static str contendo nome do arquivo
module_path!: &'static str contendo caminho completo do módulo
line!: i32 contendo número da linha
column!: i32 contendo número da coluna
Exemplo 6
fn main() 
{
  println!("arq: {} => linha: {}, coluna: {}",file!(), line!(), column!());
}
Saída
arq: src/main.rs => linha: 3, coluna: 65
  1. 16/08/2026 - versão inicial: println!, print!, format!, eprintln!, eprint! , todo/unimplemented e file!/line!