ग्लोबल स्कोप
ब्लॉक के बाहर परिभाषित वेरिएबल्स प्रोग्राम के अंत तक विजिबल होते हैं।
उदाहरण
#include <stdio.h>
int c = 30; // ग्लोबल
int main() {
int a = 10;
printf("a=%d, c=%d\n", a, c);
fun();
return 0;
}
void fun() {
printf("c=%d\n", c);
}
आउटपुट
a=10, c=30 c=30
लोकल स्कोप
ब्लॉक या फंक्शन के भीतर घोषित वेरिएबल्स केवल उसी ब्लॉक में एक्सेसिबल होते हैं, बाहर अस्तित्व नहीं रखते।
उदाहरण: अलग ब्लॉक्स
#include <stdio.h>
int main() {
int i = 1; // लोकल टू main
printf("%d ", i);
{
int j = 2; // लोकल टू इस ब्लॉक
printf("%d ", j);
}
// j यहां एक्सेसिबल नहीं
return 0;
}
आउटपुट
1 2
उदाहरण: समान नाम, अलग ब्लॉक्स
#include <stdio.h>
int main() {
{
int i = 1;
printf("%d ", i);
}
{
int i = 2; // अलग वेरिएबल
printf("%d ", i);
}
return 0;
}
आउटपुट
1 2
वेरिएबल शैडोइंग (मास्किंग)
आउटर ब्लॉक के वेरिएबल को इनर ब्लॉक में समान नाम से पुनः घोषित करने पर आउटर वेरिएबल मास्क हो जाता है।
उदाहरण
#include <stdio.h>
int main() {
int i = 1;
{
int i = 2; // आउटर i को मास्क करता है
printf("%d ", i); // 2 प्रिंट करता है
}
// आउटर i फिर से विजिबल
return 0;
}
आउटपुट
2
नेस्टेड ब्लॉक्स में एक्सेस
आउटर ब्लॉक के वेरिएबल नेस्टेड ब्लॉक्स में एक्सेसिबल हैं, यदि इनर ब्लॉक में समान नाम से घोषित न हों।
उदाहरण
#include <stdio.h>
int main() {
int i = 1;
{
int j = 2;
printf("%d ", j); // 2
printf("%d ", i); // 1 (आउटर से एक्सेस)
}
return 0;
}
आउटपुट
2 1
सारांश
| स्कोप | घोषणा स्थान | विजिबिलिटी | लाइफटाइम |
|---|---|---|---|
| ग्लोबल | सभी फंक्शन्स के बाहर | पूरा प्रोग्राम | प्रोग्राम अवधि |
| लोकल (फंक्शन) | फंक्शन के अंदर | केवल वह फंक्शन | फंक्शन कॉल अवधि |
| ब्लॉक | { } के अंदर | केवल वह ब्लॉक | ब्लॉक निष्पादन अवधि |