2011-04-01 15 views
12
struct HybridExpression { 
    RawExpressionElement *ree; 
    ExpressionNode *en; 
};  

vector<HybridExpression> hexpression; 

hexpression.insert(hexpression.begin() + starti, 
     (HybridExpression) {NULL, en}); 

जीसीसी बिना चेतावनी के बनाता है लेकिन दृश्य स्टूडियो 2010 इसे संकलित भी नहीं करेगा।यह अवैध सी ++ है?

यह इस बिट की तरह does not: (HybridExpression) {NULL, en}

+2

कंपाइलर त्रुटि संदेश क्या है? –

उत्तर

19

यह सी प्रोग्रामिंग भाषा का एक हिस्सा उपयोग कर रहा है जिसे सी ++ में शामिल नहीं किया गया है, इसे "कंपाउंड शाब्दिक" कहा जाता है। g++ -ansi इस का निदान होगा, कह

चेतावनी: आईएसओ सी ++ मनाही यौगिक-शाब्दिक

यह नहीं C++ 0x का एक हिस्सा है।

C++ 0x संगत वाक्य रचना

hexpression.insert(hexpression.begin() + starti, HybridExpression{NULL, en}); 

हो गया होता C99 मानक के शब्दों में, पैरा 6.5.2.5:

एक पोस्टफ़िक्स अभिव्यक्ति है कि एक parenthesized प्रकार बाद नाम के होते हैं शुरुआती की एक ब्रेस-संलग्न सूची द्वारा एक यौगिक शाब्दिक है। यह एक अज्ञात ऑब्जेक्ट प्रदान करता है जिसका मान प्रारंभकर्ता सूची द्वारा दिया जाता है।

+0

वैसे मैं माइक्रोसॉफ्ट पर क्रोध नहीं कर सकता अगर यह मानकों में नहीं है ... –

+0

@ tm1rbrt: आप अभी भी सी को त्यागने के लिए उन पर क्रोधित हो सकते हैं! – Cubbi

+2

@ कब्बी: यह एक अच्छी बात है, बुरी चीज नहीं। – Puppy

0

यह वैध सी ++ वर्तमान मानक में नहीं है। मैं सोचता हूं जीसीसी इसे जीसीसी-विशिष्ट कंपाइलर एक्सटेंशन की वजह से अनुमति देता है।

3

http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/C_002b_002b-Extensions.html#C_002b_002b-Extensions के अनुसार, आप जीसीसी के साथ संकलित सी ++ कार्यक्रमों में सी एक्सटेंशन (सी 99 सामान सहित) का उपयोग कर सकते हैं।

Compound literals वह एक्सटेंशन है जिसका आप वास्तव में उपयोग कर रहे हैं।

+0

यौगिक अक्षर को कम से कम N3242 के रूप में C++ 0x में शामिल नहीं किया गया है, और गैर-निरंतर प्रारंभकर्ता इस मामले में उपयोग किए जाने वाले एक्सटेंशन नहीं हैं (वे सी 8+ के लिए जीसीसी का विस्तार नहीं हैं, सी ++ नहीं)। – Cubbi

+0

@ कब्बी: पहले लिंक के रूप में, आप सी ++ के लिए सी भाषा में जीसीसी एक्सटेंशन का उपयोग कर सकते हैं। –

+0

हां, पहला लिंक अच्छा है, इसलिए मैंने डाउनवोट नहीं किया। दूसरा एक प्रासंगिक नहीं है। यह होना चाहिए http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Compound-Literals.html#Compound-Literals – Cubbi

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