Ich schreibe eine C++ - Bibliothek, die eine externe C-Bibliothek von Drittanbietern verwendet. Also wird meine Bibliothek Funktionen in dieser Third-Party-Bibliothek aufrufen und die Third-Party-Bibliothek wird in einen anderen Teil meiner Bibliothek zurückrufen.Ausnahmeausbreitung in extern verknüpften C-Bibliotheken
Ich frage mich, was in diesem Fall zu Ausnahmen geschieht? Say MyLib :: foo() ruft externe C-Bibliothek-Funktion, die schließlich ruft MyLib :: bar(), und Balken löst eine Ausnahme, was passiert? Wird die Ausnahme in foo() korrekt an einen Handler weitergegeben?
Danke!
Das ist besser als meine Antwort. Ich habe nicht gesehen, dass die Third-Party-Bibliothek C und nicht C++ war. Obwohl der Fragesteller das mehrmals erwähnt. Schlafenszeit, vielleicht. –
Dies ist die richtige Antwort. Während einige Implementierungen (GNU) sich sehr bemühen, Ausnahmen zu erlauben, sich über C-Code zu verbreiten, ist es eine sehr, sehr schlechte Idee, dies zu nutzen. Es ist nicht nur nicht portierbar, es gibt auch keinen Grund anzunehmen, dass der C-Code dazwischen keinen inkonsistenten Zustand hat oder Speicherzuweisungen enthält, die noch nicht extern aufgezeichnet oder freigegeben wurden. Im besten Fall fragt man nach Speicherlecks und im schlimmsten Fall nach zufälligen Abstürzen. Ich mag den Vorschlag von sbi, das Problem zu umgehen, aber es ist wahrscheinlich am besten, Ausnahmen über Modulgrenzen hinweg zu vermeiden. –
@Tommy: Ich habe eine langwierige Erklärung geschrieben, warum Ausnahmen durch eine C-Lib propagieren, ist schlecht als Kommentar zu Ihrer Antwort und wurde mürrisch, als Sie es bereits gelöscht hatten, als ich den Kommentar committen wollte. Also danke für deinen netten Kommentar, der das wieder wettgemacht hat. ':)' – sbi