2012-02-24 15 views
21

संभव डुप्लिकेट:अजीब C/C++ वाक्य रचना

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

यह संकलित करता है तथा रन:
What's this C++ syntax that puts a brace-surrounded block where an expression is expected?

मैं सिर्फ यह अजीब C/C++ वाक्य रचना का सामना करना पड़ा जीसीसी और जी ++ (4.5.2) दोनों का उपयोग कर ठीक है। यह पहली बार है जब मैं ऐसा कुछ देखता हूं, और मुझे आश्चर्य है कि वास्तव में इस वाक्यविन्यास का क्या अर्थ है। मैंने इसे Google करने का प्रयास किया है, लेकिन मुझे नहीं पता कि इस निर्माण को क्या कहा जाता है।

+0

यह 100% डुप्ली है, बस इसे ढूंढना है ... – Xeo

+0

ठीक है, मैं कोड के इस टुकड़े पर आया हूं: http://gcc.gnu.org/bugzilla/show_bug.cgi?id= 50,179। – enobayram

+2

@Xeo इस बार यह केवल "अजीब सी सिंटेक्स" है :) – ydroneaud

उत्तर

27

उन्हें statement expressions कहा जाता है, यह एक जीएनयू एक्सटेंशन है। आपके उदाहरण में अभिव्यक्ति का परिणाम b__ है।

+3

मै मैक्रोज़ में उपयोग किए जाने पर वे बहुत सुविधाजनक होते हैं, क्योंकि वे मैक्रोज़ को परिणाम (लगभग) कार्य करने की अनुमति देते हैं जैसे परिणाम लौटते हैं। –

+0

@BlagovestBuyukliev Yup, मुझे विशेष रूप से दस्तावेज़ों में 'maxint' मैक्रो उदाहरण पसंद है। – cnicutar

+0

तो यह है कि कैसे shorthand lambdas काम करते हैं? –

संबंधित मुद्दे