2010-05-02 6 views

Antwort

10

Nein, C hat keine Unterstützung für Lambda-Ausdrücke.

Wenn Sie bereit sind, C++ zu verwenden, hat Boost eine Bibliothek, die Lambda emuliert. Außerdem wird C++ 0x integrierte Unterstützung für Lambda-Ausdrücke haben.

Es gab zu dieser Zeit keine große Nachfrage nach Unterstützung für Lambda-Ausdrücke in C, daher wurde dies von der Sprache nicht unterstützt.

+1

... liebe dich. Und jetzt liebe ich Stack Overflow, denn das war schnell! – shosh

3

Nein, C hat keine Lambda-Ausdrücke (oder andere Möglichkeiten, um Verschlüsse zu erzeugen).

Dies ist wahrscheinlich so, weil C eine Low-Level-Sprache ist, die Features vermeidet, die eine schlechte Performance haben und/oder die Sprache oder das Laufzeitsystem komplexer machen.

5

C unterstützt weder Lambda-Ausdrücke noch andere Möglichkeiten (innerhalb des Standards der Sprache), um dynamisch Funktionen zu erstellen - alle Funktionen werden standardmäßig zum Zeitpunkt der Kompilierung erzeugt. Ich vermute, der Grund ist, die Sprache klein, einfach, schlank und sehr schnell zu halten, wobei kaum Unterstützung für die Laufzeitbibliothek erforderlich ist - entscheidend für eine Sprache, die bei der Programmierung von Betriebssystemen, Gerätetreibern, eingebetteten Anwendungen und so weiter.

+5

Lambda-Ausdruck erfordert keine dynamische Erstellung einer Funktion. Es wird nur ein Objekt erstellt, das auf eine (möglicherweise namenlose) Funktion verweist, die bereits kompiliert wurde. –

+0

@Mike, in C können Sie auf vorhandene Funktionen über einen Zeiger verweisen (in der Tat, eine _ention_ des Namens der Funktion "verfällt" zu einem Zeiger darauf, so dass es ziemlich elegant und machbar ist). –

+1

Ich denke, Mike hat einen Punkt. Sie könnten theoretisch in C eine lambda-artige Syntax ohne Closures haben, um innerhalb eines Ausdrucks eine Funktion wie »x => x * x« zu definieren und einen Zeiger auf diese Funktion zu berechnen, ohne die von Ihnen erwähnte Einschränkung zu brechen. Nur wenn Sie möchten, dass Ihr Lambda auf den umgebenden Bereich zugreift, wird es unmöglich mit einem typischen C-Funktionszeiger, der nur aus der Adresse des Codes besteht. Ob solche kontextfreien Funktionen zu Recht "Lambdas" genannt werden oder nicht, weiß ich nicht. –

Verwandte Themen