相关疑难解决方法(0)

使用GCC语句表达式的匿名函数

这个问题并不十分具体; 这真的是我自己的C浓缩,我希望其他人也能发现它有用.

免责声明:我知道很多人会有回应的冲动"如果你试图做FP然后只使用一种功能语言".我在一个需要链接到许多其他C库的嵌入式环境中工作,并且没有太多空间用于更多大型共享库,并且不支持许多语言运行时.而且,动态内存分配是不可能的.我也很好奇.

我们中的许多人已经看到了lambda表达式的这个漂亮的C宏:

#define lambda(return_type, function_body) \
({ \
      return_type __fn__ function_body \
          __fn__; \
})
Run Code Online (Sandbox Code Playgroud)

一个示例用法是:

int (*max)(int, int) = lambda (int, (int x, int y) { return x > y ? x : y; });
max(4, 5); // Example
Run Code Online (Sandbox Code Playgroud)

使用gcc -std=c89 -E test.c,lambda扩展为:

int (*max)(int, int) = ({ int __fn__ (int x, int y) { return x > y ? x : y; } __fn__; });
Run Code Online (Sandbox Code Playgroud)

所以,这些是我的问题:

  1. 线int(*X)究竟是什么?宣布?当然,int*X; 是指向整数的指针,但这两者有何不同?

  2. 看一下这个扩大的宏观,最终会__fn__做什么呢?如果我写一个测试函数 …

c lambda gcc anonymous-function

49
推荐指数
2
解决办法
2万
查看次数

标签 统计

anonymous-function ×1

c ×1

gcc ×1

lambda ×1