Spec-Zone.ru › GCC 4

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-4.9.4/gcc/Java-Exceptions.html

Spec-Zone.ru

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