我在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
?它如何返回函数指针?
请查看扩展文件godbolt.org/z/C5TLWj尽管结果不容易理解
—
Eugene Sh。
我假设您是根据获得此代码的地方的注释知道的,但这确实依赖于GCC扩展的嵌套函数。
—
Thomas Jager
@EugeneSh。它通过使用GCC的嵌套函数来初始化函数指针。原始代码是从这里开始的。该项目今天在Hacker News上共享。
—
Thomas Jager
@EugeneSh。它是两个GCC扩展的组合:嵌套函数和expression中的复合语句。嵌套函数出现在复合语句内。
—
Interjay
gcc -E
)来查看其作用?