Namespaces
Variants

std:: jmp_buf

From cppreference.net
Utilities library
Défini dans l'en-tête <csetjmp>
typedef /* non spécifié */ jmp_buf ;

Le type std::jmp_buf est un type tableau approprié pour stocker les informations nécessaires à la restauration d'un environnement d'appel. Les informations stockées sont suffisantes pour rétablir l'exécution au niveau du bloc correct du programme et l'invocation de ce bloc. L'état des indicateurs de statut en virgule flottante, des fichiers ouverts, ou de toute autre donnée n'est pas stocké dans un objet de type std::jmp_buf .

Exemple

#include <array>
#include <cmath>
#include <csetjmp>
#include <cstdlib>
#include <format>
#include <iostream>
std::jmp_buf solver_error_handler;
std::array<double, 2> solve_quadratic_equation(double a, double b, double c)
{
    const double discriminant = b * b - 4.0 * a * c;
    if (discriminant < 0)
        std::longjmp(solver_error_handler, true); // Aller au gestionnaire d'erreur
    const double delta = std::sqrt(discriminant) / (2.0 * a);
    const double argmin = -b / (2.0 * a);
    return {argmin - delta, argmin + delta};
}
void show_quadratic_equation_solution(double a, double b, double c)
{
    std::cout << std::format("Résolution de {}x² + {}x + {} = 0...\n", a, b, c);
    auto [x_0, x_1] = solve_quadratic_equation(a, b, c);
    std::cout << std::format("x₁ = {}, x₂ = {}\n\n", x_0, x_1);
}
int main()
{
    if (setjmp(solver_error_handler))
    {
        // Gestionnaire d'erreur pour le solveur
        std::cout << "Aucune solution réelle\n";
        return EXIT_FAILURE;
    }
    for (auto [a, b, c] : {std::array{1, -3, 2}, {2, -3, -2}, {1, 2, 3}})
        show_quadratic_equation_solution(a, b, c);
    return EXIT_SUCCESS;
}

Sortie :

Résolution de 1x² + -3x + 2 = 0...
x₁ = 1, x₂ = 2
Résolution de 2x² + -3x + -2 = 0...
x₁ = -0.5, x₂ = 2
Résolution de 1x² + 2x + 3 = 0...
Aucune solution réelle

Voir aussi

sauvegarde le contexte
(macro de fonction)
saute vers l'emplacement spécifié
(fonction)
Documentation C pour jmp_buf