2012-02-24 14 views
21

Eventuali duplicati:
What's this C++ syntax that puts a brace-surrounded block where an expression is expected?Strano C/C++ sintassi

Ho appena incontrato questo strano C/C++ sintassi:

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

Questo viene compilato ed eseguito bene usando gcc e g ++ (4.5.2). Questa è la prima volta che vedo qualcosa del genere e mi chiedo che cosa significhi esattamente questa sintassi. Ho provato a Google, ma non ho idea di cosa sia chiamato questo costrutto.

+0

Questo è il 100% un duplicato, devi solo trovarlo ... – Xeo

+0

Bene, ho trovato questo pezzo di codice su: http://gcc.gnu.org/bugzilla/show_bug.cgi?id= 50179. – enobayram

+2

@Xeo Questa volta è solo "Weird C Syntax" :) – ydroneaud

risposta

27

Si chiama statement expressions, è un'estensione GNU. Nel tuo esempio il risultato dell'espressione è b__.

+3

Aggiungerei che sono molto convenienti quando vengono utilizzati nei macro, poiché consentono alle macro di agire (quasi) come le funzioni che restituiscono un risultato. –

+0

@BlagovestBuyukliev Sì, mi piace soprattutto l'esempio di macro 'maxint' nei documenti. – cnicutar

+0

Quindi è così che funzionano i lambda? –