Section courante

A propos

Section administrative du site

cfg_match (expérimental)

Correspondance de configuration
Rust

Syntaxe

pub macro cfg_match {
   ({ $($tt:tt)* }) => { ... },
   (_ => { $($output:tt)* }) => { ... },
   ($cfg:meta => $output:tt $($($rest:tt)+)?) => { ... },
}

Description

Cette macro permet de définir des structures similaires à match en fonction des conditions de compilation (#[cfg]), pour sélectionner du code selon les plateformes ou les options activées.

Remarques

Il s'agit d'une macro permettant de définir des instructions de type #[cfg].

Elle est similaire à la macro de préprocesseur C if/elif en permettant la définition d'une cascade de cas #[cfg], en émettant l'implémentation correspondant en premier.

Cela vous permet de fournir facilement une longue liste de blocs de code #[cfg] sans avoir à réécrire chaque clause plusieurs fois.

Les bras de correspondance génériques _ de fin sont facultatifs et indiquent une branche de secours lorsque toutes les déclarations précédentes ne sont pas évaluées à true.

Exemple

  1. #![feature(cfg_match)]
  2.  
  3. cfg_match! {
  4.     unix => {
  5.         fn foo() { /* fonctionnalités spécifiques à Unix */ }
  6.     }
  7.     target_pointer_width = "32" => {
  8.         fn foo() { /* fonctionnalité non-Unix, 32 bits */ }
  9.     }
  10.     _ => {
  11.         fn foo() { /* implémentation de secours */ }
  12.     }
  13. }

Si vous le souhaitez, il est possible de renvoyer des expressions en utilisant des accolades environnantes :

  1. #![feature(cfg_match)]
  2.  
  3. let _some_string = cfg_match! {{
  4.     unix => { "Un grand pouvoir entraîne de grosses factures d'électricité" }
  5.     _ => { "Derrière chaque régime réussi se cache une pizza non surveillée" }
  6. }};    


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