Spec-Zone.ru › GCC 6

7.12 Исключения 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-6.5.0/gcc/Java-Exceptions.html

Spec-Zone.ru

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