Spec-Zone.ru › GCC 5

7.11 Исключение Java

Язык Java использует немного другую модель обработки исключений, чем C++. Обычно GNU C++ автоматически обнаруживает, когда вы пишете код C++, использующий исключения Java, и обрабатывает их должным образом. Однако, если коду C++ нужно только выполнить деструкторы при возникновении исключений Java через него, GCC делает неверное предположение. Пример проблемного кода:

struct S { ~S(); };
extern void bar();    // is written in Java, and may throw exceptions
void foo()
{
  S s;
  bar();
}

Обычным результатом неверного предположения является ошибка линковки, с жалобой о недостающей функции, называемой ‘__gxx_personality_v0’.

Вы можете сообщить компилятору, что исключения Java должны использоваться в единице трансляции, независимо от того, что он может думать, написав ‘#pragma GCC java_exceptions’ в начале файла. Этот ‘#pragma’ должен появиться до любых функций, которые выбрасывают или ловят исключения, или выполняют деструкторы при возникновении исключений через них.

Вы не можете смешивать исключения Java и C++ в одной единице трансляции. Считается безопасным выбрасывать исключение C++ из одного файла через другой файл, скомпилированный для модели исключений Java, или наоборот, но могут быть ошибки в этой области.

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-5.5.0/gcc/Java-Exceptions.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API