Section courante

A propos

Section administrative du site

unreachable

Inaccessible
Rust

Syntaxe

macro_rules! unreachable {
   ($($arg:tt)*) => { ... };
}

Description

Cette macro permet d'indiquer qu'un morceau de code ne devrait jamais être atteint, et provoque une panique si ce cas se produit à l'exécution.

Remarques

Permet d'indiquer un code inaccessible.

Ceci est utile lorsque le compilateur ne parvient pas à déterminer qu'une partie du code est inaccessible. Par exemple :

Si la détermination de l'inaccessibilité du code s'avère incorrecte, le programme s'arrête immédiatement en panique !

L'équivalent non sécurisé de cette macro est la fonction unreachable_unchecked, qui provoquera un comportement indéfini si le code est atteint.

Paniques

Cette macro déclenchera toujours la panique !, car «injoignable!» est simplement une abréviation de «panique !» avec un message fixe et spécifique.

Comme «panic!», cette macro possède une deuxième forme pour afficher des valeurs personnalisées.

Exemples

Correspondance des bras :

  1. fn foo(x: Option<i32>) {
  2.     match x {
  3.         Some(n) if n >= 0 => println!("Some(Non-negative)"),
  4.         Some(n) if n <  0 => println!("Some(Negative)"),
  5.         Some(_)           => unreachable!(), // erreur de compilation si commenté
  6.         None              => println!("None")
  7.     }
  8. }

Itérateurs :

  1. fn divide_by_three(x: u32) -> u32 { // l'une des implémentations les plus pauvres de x/3
  2.     for i in 0.. {
  3.         if 3*i < i { panic!("Débordement u32"); }
  4.         if x < 3*i { return i-1; }
  5.     }
  6.     unreachable!("La boucle doit toujours retourner");
  7. }    


Dernière mise à jour : Mardi, le 5 Août 2025