Я хотел бы использовать setjmp и longjmp в C-программе, которая ссылается на библиотеку, которая реализована на C++ (но имеет C API).Использование setjmp и longjmp в C при связывании с библиотеками C++
Код C++ выполняет динамическое выделение памяти, и указатели проходят через API, но пока C-сторона кода управляет этими (непрозрачными) объектами правильно, при использовании longjmp не должно возникать никаких помех, правильно?
Я знаю, что использовать эти функции в коде C++ небезопасно, но должно ли быть безопасным в коде C, связанном с кодом на C++?
Ok. Мое мышление заключается в том, что до тех пор, пока те распределения, которые были сделаны в библиотеке C++, могут быть очищены с помощью соответствующих вызовов C-интерфейса, код C++ изолирован от эффектов longjmp, а обработка исключений и longjmp не могут мешать каждому Другие. (Я также являюсь разработчиком библиотеки C++.) –
Если у вас есть обработка исключений в C++-библиотеке, вы должны убедиться, что все заброшенные исключения пойманы внутри библиотеки, вы не хотите, чтобы исключения делали ее из вашего кода на C++ (не уверен, что произойдет, если вы это сделаете, никогда не пробовали это). И для освобождения распределений C++ вам нужно будет выяснить, что нужно освободить от кода C, который берет на себя управление после вызова longjmp. Поскольку у вас есть приложение и библиотека, я не вижу никаких проблем, чтобы сделать эту работу. – Miguel