#c #try-catch
#c #try-catch
Вопрос:
Насколько я понимаю, в языке C этой функции нет, но в gdb она используется: https://fossies.org/linux/gdb/gdb/gdbserver/linux-low.c Строка 1534
TRY
/* Flush any pending changes to the process's registers. */
{
regcache_invalidate_thread (thread);
/* Finally, let it resume. */
if (the_low_target.prepare_to_resume != NULL)
the_low_target.prepare_to_resume (lwp);
}
CATCH (ex, RETURN_MASK_ERROR)
{
if (!check_ptrace_stopped_lwp_gone (lwp))
throw_exception (ex);
}
END_CATCH
Пожалуйста, объясните, как это возможно?
Спасибо
Ответ №1:
Нет, в C нет исключений.
Где-то внутри gdbserver
кода определены TRY
, CATCH
и END_CATCH
как макросы, которые имитируют исключения.
Ответ №2:
после быстрого просмотра ссылки я могу наблюдать std::vector, std::move,…
Похоже, что код содержит c .
Вот одно из определений макроса TRY: http://sourceware.org/git/gitweb.cgi ?p=binutils-gdb.git;a=blob;f=gdb/common/common-exceptions.h;hb=e3624a40aeb31065c968d0d3a1d55fdf8e8a4e3c#l246