C block 作用域函数?

标签 c

是否可以创建一个在 block 范围内工作的函数?比如

编辑澄清

enum { cannot, must };
int it(enum modal verb);

describe(fx) {
    context("some context") {
        it(must) { /* Some test that returns an int to it() */ };
    }
}

我怀疑这是可能的,那么我能做的下一个最好的事情是什么?

最佳答案

在我看来,这看起来几乎像 Smalltalk 或 Ruby,这让我觉得您想将闭包(有时称为 block )传递给函数。这可以通过对 C 的各种扩展来实现,并且也有变通方法。

例如,也许您想遍历一个列表:

{
    // this does not actually work, sorry
    iterate(list) { |i| -> printf("%d\n", i); }
}

如果您正在使用 Apple 的 C 扩展,您可以使用称为“ block ”的东西

{
    // Apple only
    iterate(list, ^(int i) { printf("%d\n", i); });
}

你也可以写一个回调,

static void my_callback(int i) { printf("%d\n", i); }

...
{
    iterate(list, my_callback);
}

回调无法访问其他函数范围内的变量,所以你必须想办法共享变量。

并且GCC中有嵌套函数;这些可以访问作用域变量,就像 Apple 的“ block ”扩展一样。

{
    // GCC only
    void callback(int i) { printf "%d\n", i); }
    iterate(list, callback);
}

如果您发现自己非常想这样做,那么切换到 C 以外的语言可能会省去很多麻烦。C 对于高阶编程不是很友好。

关于C block 作用域函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11643535/

相关文章:

c - 在 C 中调用函数时出现预期表达式错误

c - 返回函数中的指针

c - fscanf() 读取带格式行空格的字符串

有向图的 C 输入

c - C 中的指针导致未知的随机字符

c++ - C++ 中的 Unicode 问题,但不是 C

谁能解释一下这个功能是如何工作的?

objective-c - Malloc 的字符串包含垃圾值

将结构体值与变量进行比较

C——换档动力操作