C++ runtime, afficher de message d'exception
Je suis à l'aide de gcc sous linux pour compiler du code C++.
Il y a quelques exceptions qui ne doivent pas être manipulés et doit fermer le programme.
Cependant, je voudrais pouvoir afficher exception de la chaîne:
Par exemple:
throw std::runtime_error(" message");
n'affiche pas de message, seul type d'erreur.
Je voudrais afficher des messages.
Est-il moyen de le faire?
c'est une bibliothèque, je ne veux vraiment pas à mettre des instructions catch et laissez-la bibliothèque de l'utilisateur de décider.
Cependant, pour l'instant, la bibliothèque de l'utilisateur est fortran, qui ne permet pas de gérer les exceptions.
en principe, je peux mettre des gestionnaires dans le code wrapper, mais plutôt de ne pas s'il existe un moyen de contourner
throw std::runtime_error(" message");
affiche maintenant le message sur g++ 6.2.0, Ubuntu 16.10.Merci! Propre et un minimum d'effort.
OriginalL'auteur Anycorn | 2010-04-26
Vous devez vous connecter pour publier un commentaire.
Les exceptions Standard ont un virtuel
what()
méthode qui vous donne le message associé à l'exception:Si votre code est destiné à être utilisé à partir de la non-code C++, il devrait être donné une liaison C et ne doit jamais permettre des exceptions à s'échapper dans le code appelant.
ce qui est une bonne façon de communiquer terminal des problèmes dans le programme principal? J'ai besoin de quelque facilité d'impression erreur de chaîne de caractères, sans compter sur les fortran sortie
C'est le programme fortran incombe de décider si un problème est terminal, et non pas les bibliothèques C++. Il y a beaucoup de solutions, (stocker l'état d'erreur dans une variable statique & fournir une API pour accéder, par exemple), mais en laissant une exception s'échapper dans le code fortran n'est pas acceptable.
Retourner les codes d'erreur par l'intermédiaire de votre Liaison C de l'interface, et de fournir aux usagers de votre bibliothèque une méthode pour convertir les codes d'erreur dans les chaînes.
OriginalL'auteur
Vous pouvez écrire dans la principale:
Et notez que cela a l'inconvénient de vent de l'emporter votre pile des appels, qui g++ normalement conserver dans le fichier de base pour les exceptions non traitées.
OriginalL'auteur
Vous pouvez utiliser
try/catch
bloc etthrow;
déclaration de laisser l'usager de la bibliothèque pour gérer l'exception.throw;
déclaration de passe le contrôle à un autre gestionnaire pour la même exception.OriginalL'auteur
Je recommande de faire un adaptateur pour votre bibliothèque pour fortran appelants. Mettez votre try/catch dans la carte. Essentiellement, votre bibliothèque a besoin de plusieurs points d'entrée si vous voulez qu'il soit appelé à partir de fortran (ou C), mais encore permettre des exceptions à propigate C++ pour les appelants. De cette façon, a aussi l'avantage de donner un C++ liaison C++ pour les appelants. N'ayant qu'une seule interface fortran vous limitera sensiblement que tout doit être passé par référence, vous devez tenir compte de paramètres cachés pour char * arguments etc.
OriginalL'auteur