xsubpp может генерировать код обработки исключений для файлов c / c ++, преобразованных из файлов .xs. Он генерирует следующий фрагмент кода для меня
TRY {
char * CLASS = (char *)SvPV_nolen(ST(0));
Example * RETVAL;
RETVAL = new Example();
ST(0) = sv_newmortal();
sv_setref_pv( ST(0), CLASS, (void*)RETVAL );
}
BEGHANDLERS
CATCHALL
sprintf(errbuf, "%s: %s\tpropagated", Xname, Xreason);
ENDHANDLERS
Но при компиляции сгенерированного кода я получаю ошибки компиляции, поскольку TRY, BEGHANDLERS, CATCHALL, ENDHANDLERS не были определены нигде в заголовочных файлах perl. Я изменил свой код, чтобы определить вышеупомянутые токены следующим образом.
#define TRY try
#define BEGHANDLERS
#define CATCHALL catch (...) {
#define ENDHANDLERS }
Но я не могу дать значимые определения Xname и Xreason. Верны ли приведенные выше определения? Как мы справляемся с вышеупомянутыми ключевыми словами