2012-02-24 16 views
21

Powiel możliwe:
What's this C++ syntax that puts a brace-surrounded block where an expression is expected?Strange C/C++ składnia

Właśnie natknąć się tej dziwnej C/C++ składnia:

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

kompiluje to i tras dobrze używając zarówno gcc jak i g ++ (4.5.2). Po raz pierwszy widzę coś takiego i zastanawiam się, co dokładnie oznacza ta składnia. Próbowałem go wypróbować, ale nie mam pojęcia, jak nazywa się ten konstrukt.

+0

To jest w 100% dupe, wystarczy je znaleźć ... – Xeo

+0

Cóż, natknąłem się na ten fragment kodu: http://gcc.gnu.org/bugzilla/show_bug.cgi?id= 50179. – enobayram

+2

@Xeo Tym razem jest to "Weird C Syntax" tylko :) – ydroneaud

Odpowiedz

27

Nazywają się statement expressions, jest to rozszerzenie GNU. W twoim przykładzie wynikiem wyrażenia jest b__.

+3

Dodam, że są bardzo wygodne, gdy są używane w makrach, ponieważ pozwalają makrom działać (prawie) jak funkcje zwracające wynik. –

+0

@BlagovestBuyukliev Yup, szczególnie podoba mi się przykład makra 'maxint' w dokumentach. – cnicutar

+0

Więc jak działają stenografia lambdas? –