如何在函数中创建函数并 return 它们?

How to create functions within a function and return them?

我想创建一个 return 函数来检查给定的 int 是否在特定范围内。 因此 returned 函数应该只接受一个参数,一个 int 和 return 一个 bool。这是必要的,因为 returned 函数作为函数指针传递给另一个函数。到目前为止,我只能这样做:

bool valueIsInBounds(int value) { return value >= 0 && value <= 100; }

int main() {
    functionThatTakesAFunction(&valueIsInBounds);
}

0100 显然是固定值,我想改变它。
我希望能够做的是这样的:

??? functionGenerator(int min, int max) { ??? }

int main() {
    functionThatTakesAFunction(&(functionGenerator(0, 100)));
}

我知道这在其他语言中是可行的,但我不知道在 C 中如何实现。

对不起。正如评论所说,这可以 not 在可移植的 C 中实现。

您必须自己生成一些程序集以将参数 (max & min) 绑定到函数指针。这称为 «trampoline» 功能,并且存在多个库。这是一个:https://www.gnu.org/software/libffcall/trampoline.html

看看这个 SO post 以获得更好的解释和使用上面的 trampoline 库的示例。

由于无法在 C 中动态生成函数,下一个最佳方法是对函数进行参数化。

您可以(如您的问题)将边界作为附加参数传递,或者您可以使用这些边界设置全局或静态变量。

bool valueIsInBounds(int value, int min, int max) { return value >= min && value <= max; }

int main() {
    functionThatTakesAFunction(valueIsInBounds);
}

或:

int gMin, gMax;
void setBounds(int min, int max) { gMin= min; gMax= max; }
bool valueIsInBounds(int value)  { return value >= gMin && value <= gMax; }

int main() {
    setBounds(0, 100);
    functionThatTakesAFunction(valueIsInBounds);
}