2012-08-31 11 views
8

यह संकलित जब clang -std=gnu++11 -c test.cpp का उपयोग कर:clang -std = gnu ++ 11 का उपयोग करते समय यह C++ कोड संकलित क्यों करता है?

void test() { 
    [[random text here]] 
    if (0) { 
    } 
} 

लेकिन इस त्रुटि main.cpp:3:1: error: expected statement देता है:

void test() { 
    [[random text here]] 
} 

अगर मैं clang -std=gnu++11 -S -emit-llvm main.cpp साथ संकलन और LLVM कोड यह [[...]] लाइन की तरह दिखता है पर देखने कोई प्रभाव नहीं है:

define void @_Z5testv() nounwind uwtable ssp { 
    ret void 
} 

कोई विचार क्यों? बग या कुछ सी ++ 11 वाक्यविन्यास या जीएनयू एक्सटेंशन वाक्यविन्यास? Xcode 4.4.1 (एप्पल बजना संस्करण 4.0 से

बजना का उपयोग कर इम (टैग/एप्पल/बजना-421.0.60) (LLVM 3.1svn के आधार पर)।

+1

'[[यहां यादृच्छिक पाठ]] 'क्या यह कोड में आपके द्वारा डाले गए शब्दों का एक शाब्दिक विवरण है, या यह कि किसी चीज़ के लिए प्लेसहोल्डर है? मैं बस इसे स्पष्ट करना चाहता हूं। –

+1

कोई प्लेसहोल्डर नहीं है जो सटीक स्रोत कोड –

उत्तर

10

यह सी ++ 11 की विशेषता सिंटैक्स का उपयोग कर रहा है। "random text here" इसलिए एक विशेषता माना जाता है। सी ++ 11 विनिर्देश के अनुसार, एक विशेषता कई बयानों और घोषणाओं संशोधित कर सकते हैं।

गुण बयान हो सकता है, लेकिन वे वास्तव में बयान रहना होगा। मतलब वे अंत ; में कई अन्य सी ++ कथन की तरह।

कार्यान्वयन द्वारा समर्थित विशेषताओं का सेट कार्यान्वयन-परिभाषित है (और क्लैंग किसी का समर्थन नहीं करता है। वास्तव में, यह स्पष्ट रूप से विशेषता वाक्यविन्यास का समर्थन नहीं करना चाहिए, according to the website)। किसी विशेष कार्यान्वयन द्वारा लागू नहीं किए गए गुणों को अनदेखा किया जाना चाहिए, यही कारण है कि इसका कोई प्रभाव नहीं पड़ता है।

+0

धन्यवाद! मैंने कुछ उद्देश्य-सी ++ कोड में इस पर ठोकर खाई, जहां किसी ने गलती से एक पंक्ति पर '[[NSValue alloc]] टाइप किया था :) –

+1

क्लैंग सी ++ 11 विशेषता वाक्यविन्यास का समर्थन करता है, और यहां तक ​​कि एक गैर-मानक विशेषता का समर्थन करता है: [ बजना :: fallthrough] (http://clang.llvm.org/docs/LanguageExtensions.html#clang__fallthrough)। क्लैंग वास्तव में मानक विशेषताओं का कुछ उपयोग भी करता है। उदाहरण के लिए यह '[[noreturn]]' चिह्नित फ़ंक्शन के लिए चेतावनी उत्पन्न कर सकता है जो वास्तव में वापस आता है, और कोडेजन वास्तव में प्रभावित होता है। मुझे कल्पना है कि सबकुछ पूरा नहीं हुआ है, इसलिए यह अभी तक चिह्नित नहीं है। – bames53

+0

@ bames53: यह अजीब बात है, क्योंकि उनकी वेबसाइट बस "नहीं" कहती है। आंशिक या कुछ भी नहीं। –

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