दिलचस्प पोस्ट
टॉमकेट में संदर्भों के बीच सत्र डेटा साझा करना वेबसाइट, मेल और फोन नंबर के लिए यूआईटीक्श्वेव लिंक्स का पता लगाने के लिए कैसे करें मैं कैसे डिबग कर सकता हूं क्यों सरल MySQL क्वेरी गलत देता है? SAX पार्सर्स जावा में XPath का उपयोग कर सकते हैं? संग्रह संशोधित किया गया था; LISTBox से ListItem को निकालने पर गणन त्रुटि को निष्पादित नहीं कर सकता आर में एक उपयोगी डेटा फ्रेम में विभिन्न लंबाई के सदिश की सूची को कैसे परिवर्तित करें? जावा "शून्य" और "गैर शून्य" निर्माता स्पार्क-एमएल के साथ स्पष्ट सुविधाओं को कैसे संभालना है? JQuery के AJAX प्रतिक्रिया एचटीएमएल के साथ डिव अद्यतन करें वहाँ एक अच्छा jQuery खींचें और ड्रॉप फ़ाइल अपलोड प्लगइन है? कुंडली के लिए एक इनपुट के लिए एक चार कारण loop इनपुट जंगली जाने के लिए जांच की जाती है मैं एक प्रकार की एक संयोग के साथ एक प्रोटोकॉल के अनुरूप विभिन्न प्रकारों को कैसे जोड़ूं? <iframe> डोमेन पर जावास्क्रिप्ट प्रवेश अभिभावक DOM? क्या नेट, केबी, एमबी, जीबी, आदि के लिए कन्वर्ट बाइट्स को आसान तरीका प्रदान करता है? सीएसएस फ़ाइल में सापेक्ष यूआरएल का उपयोग करना, यह किस स्थान से संबंधित है?

कब सी में एक वैश्विक चर का उपयोग करना ठीक है?

जाहिरा तौर पर वहाँ रायओं में बहुत से विविधताएं हैं, जिनमें से, " कभी नहीं! हमेशा कभी भी कैप्चर (भले ही यह केवल मैक्रो के साथ हो!) " से " यह कोई बड़ा सौदा नहीं है – उनको उपयो करें जब यह अधिक सुविधाजनक नहीं है। "

इसलिए।

विशिष्ट, ठोस कारण (अधिमानतः एक उदाहरण के साथ)

  • क्यों वैश्विक चर खतरनाक हैं
  • जब विकल्प के स्थान पर वैश्विक चर का इस्तेमाल किया जाना चाहिए
  • उन विकल्पों के लिए मौजूद हैं जो ग्लोबल वैरिएबल्स को अनुपयुक्त तरीके से उपयोग करने के लिए मोहक हैं

हालांकि यह व्यक्तिपरक है, मैं एक जवाब चुनूंगा (मेरे लिए सबसे अच्छा प्रेम / नफरत संबंध का प्रतिनिधित्व करता है, हर डेवलपर को विश्व के साथ होना चाहिए) और समुदाय उनकी तरफ बस नीचे वोट देगा।

मेरा मानना ​​है कि नए लोगों के लिए इस प्रकार के संदर्भ महत्वपूर्ण हैं, लेकिन कृपया कोई अन्य उत्तर मौजूद नहीं है, तो कृपया इसे क्लिटर न करें, एक टिप्पणी जोड़ें या किसी दूसरे के उत्तर को संपादित करें।

-Adam

वेब के समाधान से एकत्रित समाधान "कब सी में एक वैश्विक चर का उपयोग करना ठीक है?"

वेरिएबल में हमेशा छोटे क्षेत्र संभवतः होना चाहिए। इसके पीछे तर्क यह है कि हर बार जब आप गुंजाइश बढ़ाते हैं तो आपके पास अधिक कोड होता है जो संभवत: चर को संशोधित करता है, इस प्रकार समाधान में अधिक जटिलता उत्पन्न होती है।

यह स्पष्ट रूप से स्पष्ट है कि वैश्विक वैरिएबल का उपयोग करने से बचने को प्राथमिकता दी जाती है अगर डिजाइन और कार्यान्वयन प्राकृतिक रूप से अनुमति देता है। इस वजह से मैं वास्तव में जरूरत नहीं है जब तक कि वैश्विक चर का उपयोग करना पसंद नहीं करता।

मैं "कभी" वक्तव्य के साथ सहमत नहीं हो सकता, किसी भी अन्य अवधारणा की तरह वैश्विक वैरिएबल एक ऐसा उपकरण होता है, जिसका उपयोग तब किया जाना चाहिए जब आवश्यक हो मैं कुछ कृत्रिम निर्माणों (जैसे कि पास के संकेतों का उपयोग) के उपयोग से वैश्विक चर का उपयोग करना चाहूंगा, जो कि वास्तविक मंशा को केवल मुखौटा रखेगा। अच्छा उदाहरण जहां ग्लोबल वैरिएबल का उपयोग किया जाता है, एम्बेडेड सिस्टम में सिंगलटन पैटर्न कार्यान्वयन या रजिस्टर का उपयोग होता है।

वास्तव में वैश्विक चर की अत्यधिक उपयोगों का पता लगाने के लिए: निरीक्षण, निरीक्षण, निरीक्षण जब भी मैं एक वैश्विक चर देखता हूं, मुझे खुद से पूछना पड़ता है: क्या यह एक वैश्विक दायरे में वास्तव में जरूरी है?

एकमात्र तरीका है कि आप ग्लोबल वैरिएबल काम कर सकते हैं उन्हें नाम देना है जो यह आश्वस्त करती हैं कि वे अद्वितीय हैं।

उस नाम में आमतौर पर कुछ "कुछ" मॉड्यूल या फ़ंक्शन का संग्रह शामिल होता है जिसके लिए वैश्विक चर विशेष रूप से केंद्रित है या सार्थक।

इसका मतलब यह है कि उन कार्यों के लिए वेरिएबल "संबंधित" हैं – यह उन का हिस्सा है दरअसल, ग्लोबल को आमतौर पर एक छोटी सी फ़ंक्शन के साथ "लिपटे" किया जा सकता है जो दूसरे फ़ंक्शन के साथ चलता है – उसी फ़ाइल में उसी फ़ाइल का नाम उपसर्ग है।

बोनस।

जब आप ऐसा करते हैं, अचानक, यह वास्तव में वैश्विक नहीं है। यह अब संबंधित कार्यों के कुछ मॉड्यूल का हिस्सा है।

यह हमेशा किया जा सकता है कुछ सोचने के साथ ही हर पूर्ववर्ती वैश्विक चर को कुछ विशेषताओं के लिए सौंपा जा सकता है, जो कि एक विशेष .h फाइल के लिए आवंटित की जाती है, और फ़ंक्शंस से पृथक किया जाता है जो आपको बिना किसी चीज़ को तोड़ने वाले परिवर्तन को बदलने की इजाजत देता है।

"वैश्विक चर का उपयोग कभी नहीं" के बजाय, आप कह सकते हैं कि "कुछ मॉड्यूल में वैश्विक वैरिएबल की ज़िम्मेदारियां असाइन करें जहां यह सबसे अधिक समझ में आता है।"

इस कोयन पर विचार करें: "यदि दायरा काफी छोटा है, तो सब कुछ वैश्विक है"।

एक युग में यह अभी भी बहुत संभव है कि एक बार नौकरी करने के लिए एक बहुत ही शीघ्र उपयोगिता कार्यक्रम लिखना जरूरी है।

ऐसे मामलों में, चर की सुरक्षा के लिए आवश्यक ऊर्जा ऐसी छोटी उपयोगिता में समस्याओं की डिबगिंग से बचाई ऊर्जा से अधिक है।

यह एकमात्र ऐसा मामला है जो मुझे लगता है कि जहां कहीं वैश्विक वैरिएबल बुद्धिमान हैं, और यह अपेक्षाकृत दुर्लभ है। उपयोगी, उपन्यास कार्यक्रम इतने छोटे हैं कि वे मस्तिष्क की अल्पावधि मेमोरी के भीतर पूरी तरह से आयोजित किए जा सकते हैं, लेकिन वे अभी भी मौजूद हैं

वास्तव में, मैं निर्भयतापूर्वक दावा कर सकता हूं कि यदि कार्यक्रम यह छोटा नहीं है, तो वैश्विक चर अवैध होना चाहिए।

  • अगर चर कभी नहीं बदलेगा, तो यह एक निरंतर होता है, नहीं चर।
  • यदि चर की सार्वभौमिक पहुंच की आवश्यकता है, तो इसे प्राप्त करने और सेट करने के लिए दो उप-रूट मौजूद रहें, और उन्हें सिंक्रनाइज़ किया जाना चाहिए।
  • अगर कार्यक्रम छोटे से शुरू हो जाता है, और बाद में बड़ा हो सकता है, तो कोड के रूप में कार्यक्रम आज बड़ा है, और वैश्विक चर को खत्म कर दिया। सभी कार्यक्रम नहीं बढ़ेंगे! (हालांकि, जाहिर है, यह मानता है कि प्रोग्रामर समय को कोड फेंकने को तैयार है।)

सी में ग्लोबल वैरिएबल कोड को अधिक पठनीय बनाने के लिए उपयोगी हैं यदि एक वैरिएबल कई तरीकों (हर पद्धति में चर को पारित करने के बजाय) के लिए आवश्यक है। हालांकि, वे खतरनाक होते हैं क्योंकि सभी स्थानों में उस वेरिएबल को संशोधित करने की क्षमता होती है, जिससे बगों को ट्रैक करना संभवतः मुश्किल हो जाता है। यदि आपको एक वैश्विक चर का उपयोग करना चाहिए, तो हमेशा यह सुनिश्चित करें कि इसे केवल एक विधि द्वारा सीधे संशोधित किया गया है और अन्य सभी कॉल करने वाले उस विधि का उपयोग करते हैं। इससे उस चर में होने वाले बदलावों से संबंधित मुद्दों को डीबग करना बहुत आसान होगा।

जब आप थ्रेड-सेफ़ कोड के बारे में चिंतित नहीं होते हैं : जहां भी यह समझ में आता है, उनका उपयोग करें, दूसरे शब्दों में, जहां भी यह एक वैश्विक स्थिति के रूप में कुछ व्यक्त करने के लिए समझ में आता है।

जब आपका कोड बहु-थ्रेडेड हो सकता है : हर कीमत पर से बचें सार वैश्विक वैरिएबल्स में काम की कतार या कुछ अन्य धागा-सुरक्षित ढांचे में, या यदि आवश्यक हो तो उन्हें ताले में लपेटें, ध्यान में रखते हुए कि ये प्रोग्राम में संभावित बाधाएं हैं।

मैं "कभी नहीं" शिविर से आया था, जब तक कि मैं रक्षा उद्योग में काम करना शुरू नहीं करता था। कुछ उद्योग मानकों हैं जो सॉफ्टवेयर को गतिशील (सी मामले में malloc) स्मृति के बजाय वैश्विक चर का उपयोग करने की आवश्यकता है। मुझे कुछ ऐसी परियोजनाओं के लिए गतिशील स्मृति आवंटन के लिए अपने दृष्टिकोण को फिर से विचार करना है जो मैं काम करता हूं। यदि आप उचित "semaphores", धागे, आदि के साथ "वैश्विक" स्मृति की रक्षा कर सकते हैं तो यह आपकी मेमोरी प्रबंधन के लिए एक स्वीकार्य दृष्टिकोण हो सकता है।

आपको इस बात पर विचार करना होगा कि किस संदर्भ में ग्लोबल वैरिएबल का प्रयोग भी किया जाएगा भविष्य में आप यह कोड डुप्लिकेट करना चाहते हैं।

उदाहरण के लिए यदि आप किसी संसाधन को एक्सेस करने के लिए सिस्टम के भीतर सॉकेट का उपयोग कर रहे हैं। भविष्य में आप इन संसाधनों में से एक से अधिक का उपयोग करना चाहते हैं, अगर उत्तर हां है तो मैं सबसे पहले ग्लोबल से दूर रहूंगा, इसलिए एक प्रमुख रिएक्टर की आवश्यकता नहीं होगी।

यह एक ऐसा टूल है जो आमतौर पर अधिक से अधिक उपयोग किया जाता है लेकिन मुझे नहीं लगता कि वे बुरे हैं।

उदाहरण के लिए मेरे पास एक प्रोग्राम है जो वास्तव में एक ऑनलाइन डेटाबेस की तरह कार्य करता है डेटा को स्मृति में संग्रहीत किया जाता है लेकिन अन्य प्रोग्राम इसे हेरफेर कर सकते हैं। आंतरिक रूटीन हैं जो संग्रहित प्रक्रियाओं की तरह कार्य करते हैं और एक डेटाबेस में ट्रिगर करते हैं

इस कार्यक्रम में सैकड़ों वैश्विक वैरिएबल हैं, लेकिन यदि आप इसके बारे में सोचते हैं कि डेटाबेस क्या है लेकिन वैश्विक चर की एक बड़ी संख्या है

इस कार्यक्रम का उपयोग लगभग 10 वर्षों के लिए कई संस्करणों के माध्यम से किया गया है और यह कभी भी एक समस्या नहीं है और मैं इसे एक मिनट में फिर से कर रहा हूं।

मैं मानता हूं कि इस मामले में वैश्विक वार्क्स ऐसे पदार्थ हैं जिनके पास ऑब्जेक्ट की स्थिति को बदलने के लिए तरीकों का उपयोग किया गया है। इसलिए नीचे ट्रैक करने से ऑब्जेक्ट को बदल दिया, जबकि डिबगिंग एक समस्या नहीं है क्योंकि मैं सामान्यतः एक नियमित बिंदु पर ब्रेक पॉइंट सेट कर सकता हूं जो ऑब्जेक्ट की स्टेट बदलता है। या इससे भी सरल मैं बस लॉगिंग में बने परिवर्तन को बदलता हूं जो परिवर्तनों को लॉग करता है

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

आपको आमतौर पर वैश्विक चर का उपयोग नहीं करना चाहिए, जब तक कि जरूरी नहीं क्योंकि ग्लोबल वैरिएबल केवल साफ हो जाते हैं जब स्पष्ट रूप से ऐसा करने के लिए कहा जाता है या आपके कार्यक्रम समाप्त होते हैं यदि आप बहु-थ्रेडेड एप्लिकेशन चला रहे हैं, तो कई फ़ंक्शन एक ही समय में वेरिएबल पर लिख सकते हैं। यदि आपके पास कोई बग है, तो उस बग को ट्रैक करना अधिक मुश्किल हो सकता है क्योंकि आपको नहीं पता कि कौन से फ़ंक्शन चर को बदल रहा है आप विरोध के नामकरण की समस्या को भी तब तक चलाते हैं जब तक आप एक नामकरण परंपरा का उपयोग नहीं करते जो स्पष्ट रूप से वैश्विक चर को एक अनूठा नाम देता है

जब आप स्थिरांक घोषित करते हैं

कोड जटिलता चिंता का एकमात्र अनुकूलन नहीं है कई अनुप्रयोगों के लिए, प्रदर्शन ऑप्टिमाइज़ेशन में बहुत अधिक प्राथमिकता है लेकिन इससे भी महत्वपूर्ण बात यह है कि, कई परिस्थितियों में ग्लोबल वैरिएबल्स का उपयोग करके कोड जटिलता कम हो सकती है। कई, शायद विशेष, परिस्थितियों में ग्लोबल वैरिएबल न केवल स्वीकार्य समाधान हैं, बल्कि पसंदीदा हैं। मेरे पसंदीदा विशेष उदाहरण का प्रयोग वास्तविक समय के थ्रेड में चलने वाले ऑडियो कॉलबैक फ़ंक्शन के साथ किसी एप्लिकेशन के मुख्य थ्रेड के बीच संचार प्रदान करने के लिए किया जाता है।

यह सुझाव देने के लिए भ्रामक है कि वैश्विक चर बहु-थ्रेडेड अनुप्रयोगों में किसी भी चर के दायित्व हैं, दायरे के बावजूद, संभावित दायित्व है अगर यह एक से अधिक थ्रेड पर परिवर्तन करने के लिए सामने आ जाता है।

ग्लोबल वेरिएबल का प्रयोग करें। वैश्विक नामस्थान के उपयोग को व्यवस्थित करने और अलग करने के लिए जब भी संभव हो, डेटा संरचना का उपयोग किया जाना चाहिए।

वेरिएबल स्कोप प्रोग्रामर को बहुत उपयोगी संरक्षण देता है – लेकिन इसमें एक लागत हो सकती है मैं आज रात वैश्विक चर के बारे में लिखने के लिए आया था क्योंकि मैं एक अनुभवी उद्देश्य-सी प्रोग्रामर हूं जो अक्सर डेटा एक्सेस पर बाधाओं के उद्देश्य उन्मुखीकरण स्थानों से निराश हो जाता है मैं तर्क दूंगा कि वैश्विक स्तर पर वैश्विक उत्साह ज्यादातर युवाओं से आता है, मुख्य रूप से सिद्धांत-समन्वित प्रोग्रामर, विशेष रूप से ऑब्जेक्ट-ओरिएंटेड एपीआई को अलग-थलग में अनुभव किए बिना सिस्टम स्तर एपीआई के गहन, व्यावहारिक अनुभव और अनुप्रयोग विकास में उनके संपर्क के बिना। लेकिन मुझे यह स्वीकार करना होगा कि जब निराधार नामों की जगह sloppily का इस्तेमाल करते हैं तो मुझे निराश होता है I उदाहरण के लिए, कई लिनक्स डिस्स्टर्स में "पीआई" और "बापू" के रूप में विश्व स्तर पर पूर्वनिर्धारित किया गया था, जिसने मेरे बहुत से व्यक्तिगत कोड को तोड़ा था

मैं कई कारणों के बारे में सोच सकता हूं:

डिबगिंग / परीक्षण प्रयोजनों (चेतावनी – इस कोड का परीक्षण नहीं किया है):

 #include <stdio.h> #define MAX_INPUT 46 int runs=0; int fib1(int n){ ++runs; return n>2?fib1(n-1)+fib1(n-2):1; }; int fib2(int n,int *cache,int *len){ ++runs; if(n<=2){ if(*len==2) return 1; *len=2; return cache[0]=cache[1]=1; }else if(*len>=n) return cache[n-1]; else{ if(*len!=n-1) fib2(n-1,cache,len); *len=n; return cache[n-1]=cache[n-2]+cache[n-3]; }; }; int main(){ int n; int cache[MAX_INPUT]; int len=0; scanf("%i",&n); if(!n||n>MAX_INPUT) return 0; printf("fib1(%i)==%i",n,fib1(n)); printf(", %i run(s)\n",runs); runs=0; printf("fib2(%i)==%i",n,fib2(n,&cache,&len)); printf(", %i run(s)\n",runs); main(); }; 

मैंने फाइब 2 के लिए स्कॉपी चर का इस्तेमाल किया है, लेकिन यह एक और परिदृश्य है जहां ग्लोबल्स उपयोगी हो सकते हैं (शुद्ध गणितीय कार्य जो डेटा को संग्रहित करने के लिए हमेशा से बचने की आवश्यकता होती है)

प्रोग्राम केवल एक बार उपयोग किया जाता है (उदाहरण के लिए एक प्रतियोगिता के लिए), या जब विकास के समय को छोटा किया जाना चाहिए

ग्लोबल टाइप टास्टेंट्स के रूप में उपयोगी होते हैं, जहां किसी फ़ंक्शन को int के बजाय * int की आवश्यकता होती है

अगर मैं एक दिन से अधिक समय तक कार्यक्रम का उपयोग करने का इरादा रखता हूं, तो आम तौर पर मैं ग्लोबल्स से बचता हूं।

  • उपयोग नहीं करने के लिए: ग्लोबल वैरिएबल खतरनाक हो सकता है क्योंकि कभी पता नहीं कि वैश्विक वैरिएबल कैसे बदल गया है। सी फ़ाइल के अंदर पूरे स्रोत कोड का पता लगाया जाता है, जिसके भीतर उन्हें घोषित किया गया है (या, सभी। कुंआ)। यदि आपका कोड छोटी हो जाता है, तो आपको यह देखना है कि कौन से फ़ंक्शंस इसे बदलते हैं, और कब अपनी सारी स्रोत फाइल (फाइलें) खोजनी होगी। यह गलत हो जाने पर डीबग करने के लिए एक दुःस्वप्न है स्थानीय चर की अवधारणा के पीछे हम प्रतिभाशाली रूप से गुंजाइश से बाहर जाने के लिए सरलता प्रदान करते हैं – यह ट्रेस करना आसान है
  • कब का उपयोग करें: ग्लोबल वैरिएबल का इस्तेमाल किया जाना चाहिए, जब उसका उपयोग अत्यधिक नकाबपोश नहीं किया गया है और जहां स्थानीय चर का उपयोग करने की लागत बहुत अधिक जटिल है जहां यह पठनीयता को समझौता करता है इसके द्वारा, मेरा मतलब है कि तर्क के लिए एक अतिरिक्त पैरामीटर जोड़ना और रिटर्न और अन्य चीजों के बीच, पास के बिंदुओं को पास करना आवश्यक है। तीन क्लासिक उदाहरण: जब मैं पॉप का उपयोग करता हूं और स्टैक पुश करता हूं – यह फ़ंक्शन के बीच साझा किया जाता है। बेशक मैं स्थानीय चर का उपयोग कर सकता हूं लेकिन फिर मुझे एक अतिरिक्त पैरामीटर के रूप में पॉइंटर्स पास करना होगा दूसरा क्लासिक उदाहरण के एंड आर के "सी प्रोग्रामिंग भाषा" में पाया जा सकता है जहां वे एक ग्लोच () और अनगेट () फ़ंक्शन परिभाषित करते हैं जो एक वैश्विक कैरेक्टर बफर एरे साझा करते हैं। एक बार फिर, हमें इसे वैश्विक बनाने की ज़रूरत नहीं है, लेकिन बफर के इस्तेमाल में गड़बड़ करने के लिए बहुत मुश्किल है, लेकिन इसके लिए इसके अतिरिक्त जटिलता है? तीसरा उदाहरण कुछ है जिसे आप एडीडिनो शौकियों के बीच एम्बेडेड स्पेस में पाएंगे। मुख्य लूप फ़ंक्शन के भीतर फ़ंक्शन के बहुत सारे सभी मिलस () फ़ंक्शन को साझा करते हैं जो फ़ंक्शन को लागू किए जाने के समय का तात्कालिक समय होता है। क्योंकि घड़ी की गति अनंत नहीं है, मिलिस () एक लूप के भीतर भिन्न होगी। इसे स्थिर बनाने के लिए, प्रत्येक लूप से पहले समय का एक स्नैपशॉट लें और इसे वैश्विक चर में सहेजें। समय स्नैपशॉट अब उतना ही होगा जब कई फ़ंक्शन द्वारा एक्सेस किया जाएगा।
  • विकल्प: ज्यादा नहीं संभवतः स्थानीय रूप से अधिक से अधिक स्थानीय स्कॉपिंग पर छड़ी, खासकर परियोजना की शुरुआत में, बजाय इसके विपरीत। जैसा कि परियोजना बढ़ता है और अगर आपको लगता है कि जटिलता को वैश्विक चर का उपयोग करके कम किया जा सकता है, तो ऐसा करें, लेकिन केवल अगर यह बिंदु दो की आवश्यकताओं को पूरा करता है और याद रखें, स्थानीय दायरे का उपयोग करना और अधिक जटिल कोड होना, गैर-जिम्मेदार रूप से वैश्विक चर का उपयोग करते हुए कम बुराई है।

मैं यहां "कभी नहीं" शिविर में हूँ; यदि आपको एक वैश्विक चर की आवश्यकता है, तो कम से कम एक सिंगलटन पैटर्न का उपयोग करें इस तरह, आप आलसी तत्काल का लाभ उठाते हैं, और आप वैश्विक नामस्थान को अव्यवस्थित नहीं करते हैं।

वैश्विक स्थिरता उपयोगी है – आप प्री-प्रोसेसर मैक्रोज़ से ज्यादा प्रकार की सुरक्षा प्राप्त करते हैं और यदि आप तय कर लेते हैं कि मूल्य को बदलने में अभी भी उतना आसान है

ग्लोबल वैरिएबल के कुछ उपयोग हैं, उदाहरण के लिए यदि किसी प्रोग्राम के कई हिस्सों के संचालन राज्य मशीन में एक विशेष स्थिति पर निर्भर करते हैं। जब तक आप उन स्थानों की संख्या को सीमित कर देते हैं, जो बग में शामिल होने वाले वेरिएबगिंग ट्रैकिंग को संशोधित कर सकते हैं, यह बहुत बुरा नहीं है।

ग्लोबल वैरिएबल खतरनाक हो जाते हैं जैसे ही आप एक से अधिक थ्रेड बनाते हैं। उस मामले में आपको सचमुच एक फ़ाइल ग्लोबल (अधिकतम में) को वैरिएबल और गेटर / सेटर विधियों से गुंजाइश करना चाहिए जो इसे एकाधिक पहुंच से सुरक्षित करते हैं, जहां यह खतरनाक हो सकता है