【发布时间】:2020-05-16 07:39:45
【问题描述】:
我在 GitHub 上找到了这段代码,但不太明白:
#define lambda(ret_type, _body) ({ ret_type _ _body _; })
然后:
int (*max)(int, int) = lambda(int,
(int x, int y) {
return x > y ? x : y;
});
int max_value = max(1, 2);
// max_value is 2
#define 中的下划线是做什么用的,它是如何返回函数指针的?
【问题讨论】:
-
您是否尝试过仅扩展宏(例如使用
gcc -E)来查看它的作用? -
请看展开godbolt.org/z/C5TLWj虽然结果不太好理解
-
我假设您根据获得此代码的地点周围的 cmets 知道,但这确实依赖于嵌套函数的 GCC 扩展。
-
@EugeneSh。它通过使用 GCC 的嵌套函数来初始化函数指针。原始代码来自here。今天在 Hacker News 上分享了这个项目。
-
@EugeneSh。它是两个 GCC 扩展的组合:嵌套函数和 compound statements in expressions。嵌套函数出现在复合语句中。
标签: c gcc lambda macros function-pointers