std:: jmp_buf
From cppreference.net
C++
Utilities library
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Program support utilities
| Program termination | |||||||||||||||||||||
|
|||||||||||||||||||||
| Unreachable control flow | |||||||||||||||||||||
|
(C++23)
|
|||||||||||||||||||||
| Communicating with the environment | |||||||||||||||||||||
| Signals | |||||||||||||||||||||
| Signal types | |||||||||||||||||||||
| Non-local jumps | |||||||||||||||||||||
| Types | |||||||||||||||||||||
|
jmp_buf
|
|||||||||||||||||||||
|
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
Exécuter ce code
#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
|
|