Existe-t-il un moyen de retourner un code de sortie dans Rust 1.0?
J'ai essayé env::set_exit_status(exit_code);
mais cela génère une erreur de compilation.
Il y a aussi cette question: Quitter Rust program early qui est similaire mais pose des questions sur le cas où le processus doit être quitté tôt.
EDIT: Je recherche une solution qui permettra également au processus de ranger la pile, d'appeler les destructeurs, etc.
En construisant sur les commentaires de @ la réponse de FrancisGagné , si vous cherchez un équivalent de C return exit_code
, Vous pouvez le construire artificiellement de cette façon:
fn main() {
let exit_code = real_main();
std::process::exit(exit_code);
}
fn real_main() -> i32 {
// the real program here
}
De cette façon, tous les objets de votre programme seront dans la portée de la fonction real_main()
, et vous pouvez utiliser en toute sécurité return exit_code;
Dans main
tout en ayant tous les destructeurs correctement exécutés .
Il serait plus approprié d'utiliser std::env::set_exit_status(..)
, mais cette fonction n'est pas encore dans Rust stable.
std::process::exit
quitte le programme avec le code de sortie spécifié.
Depuis Rust 1.26, la fonction main
n'est plus limitée à ()
: main
peut également renvoyer une Result<(), E>
pour tout type E: Debug
. Une valeur Ok
correspond à EXIT_SUCCESS
(qui se trouve être 0 sur toutes les plates-formes) et une valeur Err
correspond à EXIT_FAILURE
(Qui se trouve être 1 sur toutes les plateformes). La valeur d'erreur est également automatiquement imprimée dans le flux d'erreur standard.
À l'avenir, Rust supportera encore plus de types de retour pour main
. Le trait Termination
(instable à partir de Rust 1.31.1) définit tous ces types. Le travail du trait consiste à convertir la valeur en un code de sortie i32
. Lorsque Termination
sera stabilisé, les applications seront naturellement capables de mettre en œuvre ce trait eux-mêmes pour fournir leur propre type de résultat.