2010-05-02 3 views

ответ

10

Нет, C не поддерживает лямбда-выражения.

Если вы хотите использовать C++, Boost имеет библиотеку, которая эмулирует lambdas. Кроме того, C++ 0x будет иметь встроенную поддержку лямбда-выражений.

В то время не было большого спроса на поддержку выражения лямбда в C, поэтому язык его не поддерживал.

+1

... love you. И теперь мне нравится Stack Overflow, потому что это было быстро! – shosh

3

Нет, C не имеет лямбда-выражений (или любого другого способа создания замыканий).

Это, скорее всего, потому, что C является языком низкого уровня, который позволяет избежать функций, которые могут иметь плохую производительность и/или сделать язык или систему времени выполнения более сложными.

5

C не поддерживает лямбда-выражения или любые другие способы (в рамках стандарта языка) для динамического создания функций - все функции в стандарте создаются во время компиляции. Я предполагаю, что причина заключается в том, чтобы сохранить язык небольшим, простым, худым и очень быстрым, при этом вряд ли нужна поддержка «библиотеки времени исполнения» - важна для языка, который так широко используется в программировании операционных систем, драйверов устройств, встроенных приложений и так далее.

+5

Lambda выражение не требует динамического создания функции. Это просто создание объекта, который ссылается на (возможно, безымянную) функцию, которая уже скомпилирована. –

+0

@Mike, в C вы можете ссылаться на существующие функции с помощью указателя (действительно, _mention_ имени функции «распадается» на указатель на нее, так что это довольно элегантно и выполнимо). –

+1

Я думаю, что у Майка есть точка. Теоретически вы могли бы иметь в C синтаксис лямбда-стиля без замыканий, чтобы определить внутри выражения функцию, подобную 'x => x * x', и оценить указатель на эту функцию, не нарушая указанное вами ограничение. Только тогда, когда вы хотите, чтобы ваш лямбда достиг своего окружения, становится невозможным с помощью обычного указателя функции C, состоящего только из адреса кода. Независимо от того, справедливо ли такие контекстно-свободные функции следует называть «лямбдами» или нет, я не знаю. –

Смежные вопросы