Страниц: [1]
  Печать  
Автор Тема: -fexceptions и корки при возбуждении  (Прочитано 8506 раз)
Wlad
Участник
*
Offline Offline

Сообщений: 3


Просмотр профиля
« : Февраля 09, 2006, 12:24:38 pm »

Я собираю проект из кучи *.o файлов, полученных как из с++, и просто с-исходников. В Си++частях используется обработка исключений.
В общей результирующей сборке стоит этот ключ.

/* my_config.h */

#ifdef __cplusplus
extern "C" {
#endif
...
int
GetValue
(      char* err_buff,
       char  line_comment_ctart_char,
 const char* file,
 const char* section,
 const char* param,
 const int   index,
       char* value,
 const char* def_value);
...
#ifdef __cplusplus
}
#endif



/* my_config.cpp */

#ifdef __cplusplus
extern "C"
#endif
int
GetValue(char* err_buff, char line_comment_ctart_char, const char* file, const char* section, const char* param, const int index, char* value, const char* def_value)
{ try
  { FileConfig_t fc(err_buff, line_comment_ctart_char, file);
    return fc.GetValue(section, param, index, value, def_value);
  } catch(int e)
  { cout << "GetValue CATCHED exception:" << e << " err_str:" << err_buff << endl; return -1; }
}


Функция GetValue вызывается из *.c кода, поэтому и применияется такая "обёртка"...
Но, всё дело в том, что приложение просто выпадает в корку при возбуждении исключения в конструкторе FileConfig_t...
Записан
lestat
QOR.Moderator
*****
Offline Offline

Сообщений: 985


I don't trust anything


Просмотр профиля WWW
« Ответ #1 : Февраля 09, 2006, 12:37:32 pm »

.c файл который вызывает функцию GetValue должен быть скомпилен тоже с -fexceptions (расширение GCC). А вообще пробрасываение исключения из C кода в C++ - имеет неопределенное поведение, зависящее от компилятора. Это вообще-то нужно знать.
Записан

Wlad
Участник
*
Offline Offline

Сообщений: 3


Просмотр профиля
« Ответ #2 : Февраля 09, 2006, 12:48:49 pm »

lestat
пробрасываение исключения из C кода в C++ - имеет неопределенное поведение, зависящее от компилятора. Это вообще-то нужно знать

Я это знаю. файл my_config.cpp  компилируется с этим ключом.
Идея-то, как раз и была в написании обёрток над С++ кодом, который используется в С-коде. То есть "непускании" исключения дальше обёртки...
Или само объявление extern "C" ужЕ "коренным образом" меняет отношение g++ к коду внутри функции и построению ея фрейма?
Записан
lestat
QOR.Moderator
*****
Offline Offline

Сообщений: 985


I don't trust anything


Просмотр профиля WWW
« Ответ #3 : Февраля 09, 2006, 12:54:51 pm »

Wlad
Или само объявление extern "C" ужЕ "коренным образом" меняет отношение

Там все влияет, и не самым лучшим образом.
Записан

lestat
QOR.Moderator
*****
Offline Offline

Сообщений: 985


I don't trust anything


Просмотр профиля WWW
« Ответ #4 : Февраля 09, 2006, 01:01:08 pm »

Wlad
файл my_config.cpp компилируется с этим ключом

Еще раз: КОПМИРИРОВАТЬ С ЭТИМ КЛЮЧОМ НУЖНО .C ФАЙЛ, КОТОРЫЙ ВЫЗЫВАЕТ ЭТУ ФУНКЦИЮ ТОЖЕ. А ВОЗМОЖНО И ВСЕ .C ФАЙЛЫ, ЕСЛИ ЕСТЬ БОЛЬШАЯ ИЕРАРХИЯ ВЫЗОВОВ ФУНКЦИЙ.
Записан

Wlad
Участник
*
Offline Offline

Сообщений: 3


Просмотр профиля
« Ответ #5 : Февраля 09, 2006, 01:02:36 pm »

lestat
Там все влияет, и не самым лучшим образом

Ну, это слишком "кругло", как-то... Ухватиться не за что... :о)
lestat
расширение GCC

Ну, дык, собсна GCC уже настолько распространён, что его "расширения" стали де факто стандартами. Может не стОит и беспокоиться по сему поводу в моём случае?... :о)
Записан
lestat
QOR.Moderator
*****
Offline Offline

Сообщений: 985


I don't trust anything


Просмотр профиля WWW
« Ответ #6 : Февраля 09, 2006, 01:06:10 pm »

Wlad
Может не стОит и беспокоиться по сему поводу в моём случае?

Вообще-то это криво и лучше беспокоиться, потому как не на каждый хитрый код с резьбой найдется свой компилятор.
Записан

Wlad
Участник
*
Offline Offline

Сообщений: 3


Просмотр профиля
« Ответ #7 : Февраля 09, 2006, 11:37:11 pm »

lestat
потому как не на каждый хитрый код с резьбой найдется свой компилятор

Да и код-то не сказал бы, что очень уж хитрый...
Хотя, понять товарищей можно: это ж если каждый будет такую "черезполосицу" из кодов С и С++ делать - трудно будет отслеживать куда там unhandled & terminated вставлять надо... Получается "клинч" идеологий и логик обработки...
Спасибо. Тему можно закрывать.
Записан
Страниц: [1]
  Печать  
 
Перейти в: