使用这个宏,
int (*max)(int, int) = lambda(int,
(int x, int y) {
return x > y ? x : y;
});
扩展到:
int (*max)(int, int) = ({
int _ (int x, int y) { return x > y ? x : y; }
_;
});
在大括号中,这使用GCC的嵌套Functions创建执行所需操作的函数,在内部作用域中,它的名称为_
。
然后,如interjay所说,使用GCC的复合Statements在Expressions,有效,函数_
被分配给指针max
。
如果未使用这样的a宏,则可以以不同的方式写入此宏,并用作:
int apply_binary_op(int (*op)(int, int), int num1, int num2) {
return op(num1, num2);
}
int enclosing_function (void) {
// Create max"lambda"
int (*max)(int, int);
{
// Curly braces limit the scope of _
int _ (int x, int y) { return x > y ? x : y; }
max = _;
}
return apply_binary_op(max, 4, -30);
}
可以比较三种方法这个代码示例。