2014-06-26 9 views
6

मेरे पास कोड है जो कुछ उपयोगिता वर्ग उत्पन्न करने के लिए प्रीप्रोसेसर-भारी ढांचे का उपयोग करता है। जाहिर है, मैक्रो की कुछ ही friend घोषणा में परिणाम एक कक्षा में दो बार शामिल करने, कुछ इस तरह:"पहले से ही एक दोस्त" चेतावनी उपयोगी कब है?

class Friendly { 
    // ::: 
    friend class Bestie; 
    friend class Bestie; 
    // ::: 
}; 

जब जीसीसी (4.8.1) के साथ बनाया गया है, यह

समान एक चेतावनी उत्पन्न करता है

Bestie पहले से ही Friendly के एक दोस्त [डिफ़ॉल्ट रूप से सक्षम]

मैं वास्तव में इस चेतावनी में एक प्रयोग नहीं देख सकता है। मैं उत्सुक हूं कि इसे पहली जगह में जीसीसी में क्यों शामिल किया गया था। हालांकि, जैसा कि एसओ समुदाय द्वारा शायद ही उत्तरदायी है, मैं इस तरह अपना प्रश्न बताऊंगा: friend से कौन सी समस्याएं उत्पन्न हो सकती हैं, या फिर प्रोग्रामर त्रुटियों की घटना क्या हो सकती है?

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

क्या कोई संभावित समस्या है जो मैं देख रहा हूं?

+1

आईएमओ, कोड डुप्लिकेशन डिफ़ॉल्ट रूप से खराब है। समस्या जो मैं देख सकता हूं वह यह है कि यदि आप किसी मित्र को विकास के समय एक कक्षा में घोषित करते हैं, और बाद में इस घोषणा को हटाने की आवश्यकता है, तो यह आसान है कि मित्र घोषणा केवल एक बार लिखी जाए, और 42 बार पूरी नहीं वर्ग परिभाषा ... निष्कर्ष निकालने के लिए, मैं कहूंगा कि बेकार कोड लिखा नहीं जाना चाहिए, शायद यही कारण है कि एक चेतावनी है। – Unda

उत्तर

1

मुझे नहीं लगता कि यह आपके मित्र वर्ग को कई बार घोषित करने के लिए उपयोगी है। मुझे लगता है कि यह bug था जो रिपोर्ट किया गया था और मुझे लगता है कि उन्होंने work around प्रदान किया है। एक दोस्त को अपनी कक्षा में एक बार घोषित करना बेहतर है और बाद में नकल करना चाहिए। this

मुझे लगता है कि चेतावनी केवल उपयोगकर्ता को सूचित करने के लिए थी कि उसने कई बार अनावश्यक कोड लिखा है जिसका उपयोग नहीं किया गया है। अन्यथा मुझे नहीं लगता कि इस चेतावनी का कोई उपयोग था। यही कारण है कि अधिकांश प्रोग्रामर ने इसे एक बग के रूप में बताया।

+0

हाँ, मुझे इस बग रिपोर्ट के बारे में पता है। यह "बेकार चेतावनी" जैसी भाषा का उपयोग करता है, लेकिन मैं कहूंगा "[उद्धरण वांछित]।" मैं उत्सुक था अगर ऐसे कोई मामले थे जहां यह चेतावनी मदद कर सकती है, इसलिए सवाल। – Angew

+0

@Angew: - मुझे लगता है कि चेतावनी केवल उपयोगकर्ता को सूचित करने के लिए थी कि उसने कई बार अनावश्यक कोड लिखा है जिसका कोई उपयोग नहीं है। अन्यथा मुझे नहीं लगता कि इस चेतावनी का कोई उपयोग था। यही कारण है कि अधिकांश प्रोग्रामर ने इसे एक बग के रूप में बताया। बीटीडब्ल्यू मुझे पहले से ही प्रश्न के लिए आपकी जिज्ञासा +1 पसंद है :)! –

+0

नहीं, यह नहीं है। यह एक * परिभाषा * नियम है, एक नहीं * घोषणा * नियम। –

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