Есть ли в языке C Try and Catch? - PullRequest
0 голосов
/ 03 марта 2019

Как я понимаю, язык 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

Пожалуйста, объясните, как это возможно?

Спасибо

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

после быстрого просмотра ссылки я могу наблюдать 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

0 голосов
/ 03 марта 2019

Нет, C не имеет исключений.

Где-то внутри gdbserver кода определены TRY, CATCH и END_CATCH как макросы, которые моделировать исключения.

...