Добрый день. Решил написать простой карусельный переключатель задач. Для переключения контекста хочу использовать нелокальные переходы (setjmp, longjmp). Чтобы исключить дублирование кода, хочу небольшой участок кода вынести в отдельную функцию. Разумеется, из-за setjmp() функция должна быть встраиваемой. В gcc для этого есть специальный атрибут always_inline.
Код
static inline void loadMainContext(void) __attribute__((always_inline));
void loadMainContext(void)
{
...
if (!setjmp(task_context))
longjmp(main_context, 1);
...
}
Но при попытке компиляции gcc ругается:
Цитата
error: function 'loadMainContext' can never be inlined because it uses setjmp
Для себя задачу пока решил использованием дефайнов, но хочется узнать: почему компилятор не даёт мне использовать setjmp() во встраиваемой функции? Компилятор GCC 4.9.2.
Сообщение отредактировал arhiv6 - May 16 2016, 14:27