2010-11-05 11 views
6

! अस्वीकरण!: कृपया ध्यान दें कि मैं अनगिनत घोषणाओं के बारे में बात कर रहा हूं। मुझे पता है कि यह एक संभावित रूप से अनौपचारिक शब्द है और इसका मतलब यह है कि घोषणा एक टाइपिफ़ नहीं है और यह अज्ञात प्रकार की वस्तु घोषित नहीं करता है। इन मामलों में सब कुछ स्पष्ट है।गुमनाम खाली अनगिनत वर्ग, structs, यूनियन, और enums

प्रश्न 1:
जो निम्न में से एक अच्छी तरह से गठित सी ++ प्रोग्राम है? (बहुविकल्पी)

//One 
int main(){ 
    struct{}; //or class{}; should be the same 
} 
//Two 
int main(){ 
    enum{}; 
} 
//Three 
int main(){ 
    union{}; 
} 

टिप्पणी:
MSVC9.0 तीनों स्वीकार करता है। नंबर एक पर यह एक चेतावनी देता है। संख्या दो और तीन पर हमें 0 त्रुटियां और 0 चेतावनियां मिलती हैं। ऑनलाइन आउटल केवल संख्या तीन स्वीकार करता है, संख्या एक और दो नैदानिक ​​संदेश के साथ संकलित करने में विफल रहते हैं "घोषणा कुछ भी घोषित नहीं करती है"। यदि, दो नंबरों में, अनाम गणना में कम से कम एक गणनाकर्ता होता है, तो नंबर दो को आउटलो कंपाइलर द्वारा सही तरीके से स्वीकार किया जाता है।

यदि आउटल कंपाइलर सही है, और यह मानक व्यवहार है, तो मुझे इसमें कुछ असंगतता दिखाई देती है। मैं समझ सकता हूं कि क्यों नंबर एक को खारिज कर दिया जाना चाहिए। मैं यह भी समझूंगा कि नंबर दो को क्यों खारिज कर दिया जाना चाहिए (कुछ भी घोषित नहीं किया जाना चाहिए), लेकिन इस मामले में नंबर तीन को भी खारिज कर दिया जाना चाहिए। और यदि नंबर तीन को खारिज नहीं किया जाना चाहिए, तो केवल एक ही अंतर जो मैं नंबर एक के साथ देखता हूं वह यह है कि एक अनौपचारिक संघ के सदस्यों का दायरा बाहरी दायरा है। लेकिन यह भी enums के साथ मामला है, इसलिए, मेरा दावा यह है कि संख्या तीन स्वीकार किया जाना चाहिए तो नंबर दो होना चाहिए।

प्रश्न 2:
तो comeau सही है, क्या विचार मैं अपने ऊपर फैसले में याद आ रही है?

पीएस मैंने आउराउ समर्थन के लिए एक ईमेल लिखा है। जैसे ही मैं इसे प्राप्त करता हूं, मैं उनका उत्तर पोस्ट करूंगा।

उत्तर

3

इनमें से कोई भी कानूनी नहीं है। देखें [dcl.dcl] अनुच्छेद 3.

+0

'enum {}; 'के लिए एक वास्तविक उदाहरण के साथ, कम नहीं! मैं इस तरह के एक wannabe भाषा वकील हूँ। – Cubbi

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