उपकरण खराब प्रोग्रामिंग अभ्यास का उपयोग करने के खिलाफ आपको सही तरीके से चेतावनी दे रहा है। मुझे संदेह है कि ऐसा इसलिए है क्योंकि आपके पास स्थिर विश्लेषक है जो मिसरा-सी अनुपालन की जांच के लिए सेट है।
सभी मिश्रा-सी के पहले अनुमति नहीं है "वैश्विक" चर, मिश्रा-सी: 2012 नियम 8.7:
कार्य और वस्तुओं बाहरी लिंकेज अगर वे केवल पर में संदर्भित के साथ परिभाषित नहीं किया जाना चाहिए अनुवाद इकाई
अर्थ इस चर या तो static
या extern
होना जरूरी होगा।
पूर्व समझ में आता है, उत्तरार्द्ध लगभग हमेशा खराब प्रोग्रामिंग अभ्यास होता है (कुछ const
चर जैसे कुछ अपवादों के साथ)। 2012 नियम 8.4:
एक संगत घोषणा दिखाई जब होगा
अब, अगर आप इस चर extern
का इरादा है, तो एक और नियम है, जो की संभावना त्रुटि, मिश्रा-सी का कारण है बाहरी लिंकेज के साथ एक ऑब्जेक्ट या फ़ंक्शन परिभाषित किया गया है।
मतलब यह है कि एमआईएसआरए अनुपालन के लिए, आपको बाहरी अनुवाद extern int x
उसी अनुवाद इकाई के अंदर दिखाई देने की आवश्यकता होगी। एमआईएसआरए इसे हेडर फाइल में डालने की सिफारिश करता है।
यह भी ध्यान रखें कृपया इस तरह है कि बुरा कोड मानक द्वारा अप्रचलित ध्वजांकित है और सी के भविष्य के संस्करणों में काम नहीं कर सकते, सी 11 6.11.2 देखें:
पहचानकर्ता के
6.11.2 सम्पर्क
स्थिर स्टोरेजक्लास विनिर्देशक के बिना फ़ाइल स्कोप पर आंतरिक लिंकेज के साथ एक पहचानकर्ता घोषित करना एक अश्लील सुविधा है।
यहां तक कि अगर यह सी द्वारा अप्रचलित अभ्यास के रूप में चिह्नित नहीं किया गया था, तब भी आप हमेशा, वैश्विक चर और extern
से बचना चाहिए के बाद से है कि स्पेगेटी प्रोग्रामिंग और स्पेगेटी तंग युग्मन के लिए सड़क है। पूरी तरह से एक अलग कार्यक्रम डिजाइन पर विचार करें।
धन्यवाद @ एग्रीर – Santz
[पुनः खोलने] के लिए कोई विशिष्ट कारण (http://stackoverflow.com/posts/37672587/revisions)? [चिह्नित कुछ भी जो चिह्नित डुप्ली चूक गया था?] (Http://stackoverflow.com/q/5110055/2173917) –
क्या क्यूए सी मिसा-अनुपालन की जांच करने के लिए सेट है, प्रति मौका? – Lundin