auf die Antwort hinzuzufügen, wie in den Kommentaren erwähnt, es ist nicht möglich lambdas/Verschlüsse in C zu schreiben und erfassen Variablen, wie Sie in C# tun würden.
Es gibt auch keine Klassen, also keinen magischen "thiscall", der die Instanzreferenz an die Funktion weitergibt. Dies bedeutet, dass Sie jeden "Zustand" manuell über Parameter übergeben müssen. So etwas wie dies in C# aussehen:
public class SomeClass
{
private int _someParameter;
public SomeClass(int p) { _someParameter = p; }
public int DoStuff(Func<int> process) => process(_someParameter);
}
// somewhere in main
var s = new SomeClass(5);
var result = s.DoStuff(x => x * 2);
Wäre so etwas in C aussehen:
struct SomeClass
{
int someParameter;
};
// all "member functions" need to get the "this" reference
void SomeClassInit(struct SomeClass *_this, int p)
{
_this->someParameter = p;
}
int DoStuff(struct SomeClass *_this, int(*process)(int))
{
return process(_this->someParameter);
}
int Process(int x)
{
return x * 2;
}
// somewhere in main
struct SomeClass s;
SomeClassInit(&s, 5);
return DoStuff(&s, Process);
Warum kehren Sie einen Funktionszeiger? – 2501
Beachten Sie, dass Sie in C kein Lambda definieren können, und Sie können sicherlich keine Variablen erfassen. Ihr Problem ist also, wie Sie den Funktionstyp deklarieren, nicht den Körper. – Groo
Randnotiz: Warum haben Sie 'exp (-x)' nicht einfach im Funktionskörper aufgerufen? –