Блог    Теги    RSS    Файлопомойка Мой Github

Блог №200 по адресу 0708:07C7 / Лямбды в Си

13 ноября 2015, 17:06
Есть два пути получения лямбд в Си:

1. Использовать дополнительный препроцессор cmacro. Идея очень интересная, но, к сожалению, реализация подводит. У меня этот препроцессор не только спотыкался на простейших конструкциях (например, лямбда, возвращающая указатель), но и умудрялся портить совершенно сторонний код ("return -1" чудесным образом превращается в "return- 1"). Проект по всей видимости заброшен.

2. Использовать расширения компилятора GCC. Это простой и безболезненный путь если нет необходимости сохранять совместимость с другими компиляторами. Для этого варианта достаточно объявить макрос:
#define lambda(l_ret_type, l_arguments, l_body)         \
({ \
l_ret_type l_anonymous_functions_name l_arguments \
l_body \
&l_anonymous_functions_name; \
})

Пример создания и использования лямбды:
    printf("%s world\n", lambda(char*, (void), { return "Hello"; } )() );

Обратите внимание: GCC волен размещать код вложенных функций (и, как следствие, лямбд) в стеке!
Теги: #c   #gcc  

Комментарии RSS

Ваше имя:

E-mail (будет скрыт):

Текст: