Sử dụng macro này,
int (*max)(int, int) = lambda(int,
(int x, int y) {
return x > y ? x : y;
});
mở rộng tới:
int (*max)(int, int) = ({
int _ (int x, int y) { return x > y ? x : y; }
_;
});
Trong các dấu ngoặc nhọn, hàm này sử dụng Hàm lồng nhau của GCC để tạo một hàm thực hiện thao tác mong muốn. Trong phạm vi bên trong, nó có tên _
.
Sau đó, như được lưu ý bởi interjay, Biểu thức tuyên bố của GCC được sử dụng. Có hiệu quả, chức năng _
được gán cho con trỏ max
.
Nếu một macro như vậy không được sử dụng, điều này có thể được viết khác và được sử dụng như:
int val1 = 4;
int val2 = -30;
int perform_operation(int (*op)(int, int)) {
int new_val = op(val1, val2);
val1 = val2;
val2 = new_val;
return new_val;
}
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 perform_operation(max);
}
Ba phương thức có thể được so sánh trong ví dụ mã này .
gcc -E
) để xem nó làm gì chưa?