Есть ли в языке C функция Try and Catch?

#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