Подтвердить что ты не робот

Как очистить программу с кодом выхода?

Есть ли способ вернуть код выхода в Rust 1.0?

Я пробовал env::set_exit_status(exit_code);, но это порождает ошибку компилятора.

Существует также этот вопрос: Запустить программу Rust early, которая похожа, но спрашивает о том, когда процесс должен быть удален раньше.


EDIT: Я ищу решение, которое также позволит процессу убрать стек, вызвать деструкторы и т.д.

4b9b3361

Ответ 1

Основываясь на комментариях @FrancisGagné answer, если вы ищете эквивалент C return exit_code, вы можете искусственно построить его таким образом:

fn main() {
    let exit_code = real_main();
    std::process::exit(exit_code);
}

fn real_main() -> i32 {
    // the real program here
}

Таким образом, все объекты вашей программы будут находиться в области функции real_main(), и вы можете безопасно использовать return exit_code; в main, пока все деструкторы будут правильно выполняться.

Было бы более целесообразно использовать std::env::set_exit_status(..), но эта функция еще не находится в стабильной Rust.

Ответ 2

std::process::exit выходит из программы с указанным кодом выхода.

Ответ 3

Начиная с Rust 1.26, функция main больше не ограничивается (): main также может возвращать Result<(), E> для любого типа E: Debug. Значение Ok отображается на EXIT_SUCCESS (который равен 0 на всех платформах), а значение Err отображается на EXIT_FAILURE (который равен 1 на всех платформах). Значение ошибки также автоматически выводится в стандартный поток ошибок.

В будущем Rust будет поддерживать еще больше типов возвращаемых данных для main. Черта Termination (нестабильная с версии 1.31.1) определяет все эти типы. Задача trait заключается в преобразовании значения в i32 выхода i32. Когда Termination стабилизируется, приложения, естественно, смогут реализовать эту черту самостоятельно, чтобы предоставить свой собственный тип результата.