2012-02-24 29 views
21

thể trùng lặp:
What's this C++ syntax that puts a brace-surrounded block where an expression is expected?Strange C/C++ cú pháp

Tôi vừa mới đi qua C/C++ cú pháp kỳ lạ này:

#include <stdio.h> 
int main() { 
    printf("%s", 
     ({ 
     static char b__[129]; 
     b__[0] = 55; 
     b__[1] = 55; 
     b__[2] = 0; 
     b__; 
     }) 
    ); 
} 

này biên dịch và chạy sử dụng tốt cả gcc và g ++ (4.5.2). Đây là lần đầu tiên tôi thấy một cái gì đó như thế này, và tôi tự hỏi chính xác cú pháp này có ý nghĩa gì. Tôi đã thử Google, nhưng tôi không biết cấu trúc này được gọi là gì.

+0

Đây là 100% một bản dupe, chỉ cần tìm nó ... – Xeo

+0

Vâng, tôi đã xem đoạn mã này tại: http://gcc.gnu.org/bugzilla/show_bug.cgi?id= 50179. – enobayram

+2

@Xeo Lần này là "Cú pháp Weird C" chỉ :) – ydroneaud

Trả lời

27

Chúng được gọi là statement expressions, đây là phần mở rộng của GNU. Trong ví dụ của bạn, kết quả của biểu thức là b__.

+3

Tôi sẽ thêm rằng chúng rất thuận tiện khi được sử dụng trong các macro, vì chúng cho phép các macro hoạt động (gần như) giống như các hàm trả về kết quả. –

+0

@BlagovestBuyukliev Yup, tôi đặc biệt thích ví dụ macro 'maxint' trong tài liệu. – cnicutar

+0

Vì vậy, cách lambdas viết tắt hoạt động như thế nào? –