2012-02-24 18 views
21

Olası Çoğalt: Bu derlerGarip C/C++ sözdizimi

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

ve ishal: Sadece bu tuhaf C/C++ sözdizimi karşılaşanlar
What's this C++ syntax that puts a brace-surrounded block where an expression is expected?

gcc ve g ++ (4.5.2) kullanarak iyi. Bu, böyle bir şey gördüğüm ilk kez ve bu sözdiziminin tam olarak ne anlama geldiğini merak ediyorum. Google'a denedim, ancak bu yapının ne çağrıldığı hakkında hiçbir fikrim yok.

+0

Bu sadece 100% bir dupe olduğunu, sadece bu kodu bulmak zorundasınız ... – Xeo

+0

Eh, bu kod parçası ile karşılaştım: http://gcc.gnu.org/bugzilla/show_bug.cgi?id= 50.179. – enobayram

+2

@Xeo Bu seferki "Tuhaf C Sözdizimi" sadece :) – ydroneaud

cevap

27

statement expressions olarak adlandırılırlar, bir GNU uzantısıdır. Örneğinizde ifadenin sonucu b__.

+3

Makrolar makroda kullanıldığında çok kullanışlı olduklarını ekledim çünkü makrolar sonuç döndüren işlevler (neredeyse) gibi davranıyorlar. –

+0

@BlagovestBuyukliev Yup, Özellikle doc'lardaki "maxint" makro örneğini beğeniyorum. – cnicutar

+0

Peki lambdas ne kadar kestiriyor? –