2013-10-16 9 views
7

मेरी सी भाषा अभ्यास के दौरान, मैं एक अभिव्यक्ति का सामना करना है और फिर मैं इसे सरल बनाया इस प्रकार मिलता है:इस अभिव्यक्ति को कैसे समझाया जाए "int a = ({10;});" सी भाषा में?

int a=({10;}); 

यह एक कानूनी अभिव्यक्ति के बाद से यह अतीत जीसीसी संकलक हो जाता है। कृपया इस भाग पर ध्यान केंद्रित करें: ({10;})। क्या कोई इसे समझाने में सक्षम है? अधिक विस्तृत, बेहतर। धन्यवाद!

+1

मैं लगभग सकारात्मक हूं कि सी कोड के कानूनी टुकड़े के बजाय एक जीसीसी विस्तार है। मैं यह देखने के लिए उत्सुक हूं कि यह क्या है, यद्यपि। – templatetypedef

+0

इसे भी कोशिश करें 'int a = [10]; ' –

+2

अर्थ समझाया गया है (यह एक जीसीसी विस्तार है), लेकिन यह अधिक स्पष्ट और पोर्टेबल रूप से लिखा गया है' int a = 10;' –

उत्तर

7

यह कथन अभिव्यक्ति है। यह एक gcc extension है और प्रलेखन 6.1 Statements and Declarations in Expressions के अनुसार:

The last thing in the compound statement should be an expression followed by a semicolon; the value of this subexpression serves as the value of the entire construct.

तो कोड के इस टुकड़े के लिए

:

int a=({10;}); 

इन नियमों मूल्य 10 जो a को सौंपा जाएगा हो जाएगा के अनुसार।

इस विस्तार, एक many gcc extensions used in the Linux kernel है, हालांकि जुड़ा हुआ लेख वास्तव में बयान भाव कवर नहीं करता है, इस kernel newbies FAQ entryबयान भाव लिनक्स कर्नेल में का उपयोग कर के पीछे तर्क के कुछ बताते हैं।

जीसीसी दस्तावेज़ जब आप एक जीसीसी विस्तार उपयोग कर रहे हैं -pedantic विकल्प के साथ संकलन आपको चेतावनी देगा नोटों के रूप में।

1

यह मानक सी नहीं है, लेकिन जीसीसी का विस्तार statement expression कहा जाता है। कोष्ठक में संलग्न एक यौगिक बयान अभिव्यक्ति के रूप में प्रकट हो सकता है।

The last thing in the compound statement should be an expression followed by a semicolon; the value of this subexpression serves as the value of the entire construct.

अपने उदाहरण में पर वापस

int a=({10;}); 

{10;}, यौगिक बयान अभिव्यक्ति के रूप में कार्य करता है तो a10 के एक मूल्य है।

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