Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Обработка ошибок C++

// Copyright 2023 Google LLC
// SPDX-License-Identifier: Apache-2.0

#[cxx::bridge]
mod ffi {
    unsafe extern "C++" {
        include!("example/include/example.h");
        fn fallible(depth: usize) -> Result<String>;
    }
}

fn main() {
    if let Err(err) = ffi::fallible(99) {
        eprintln!("Error: {}", err);
        process::exit(1);
    }
}
  • Функции C++, объявленные как возвращающие Result, перехватывают любое исключение на стороне C++ и возвращают его вызывающей функции Rust как значение Err.
  • Если исключение выброшено из функции extern "C++", которая не объявлена мостом CXX как возвращающая Result, программа вызывает std::terminate в C++. Поведение эквивалентно тому, как если бы исключение вылетело из функции C++ с noexcept.