গ্লোবাল স্কোপ (Global Scope)
ফাংশনের বাইরে ডিক্লেয়ার করা ভেরিয়েবল গ্লোবাল। প্রোগ্রামের যেকোনো ফাংশন থেকে অ্যাক্সেসযোগ্য।
#include <stdio.h>
int c = 30; // গ্লোবাল
void fun() {
printf("c = %d\n", c);
}
int main() {
int a = 10; // লোকাল
printf("a = %d, c = %d\n", a, c);
fun();
return 0;
}
আউটপুট
a = 10, c = 30 c = 30
লোকাল স্কোপ (Local Scope)
ব্লক বা ফাংশনের ভিতরে ডিক্লেয়ার করা ভেরিয়েবল। শুধু সেই ব্লকে সীমাবদ্ধ।
#include <stdio.h>
int main() {
int i = 1;
printf("%d ", i); // 1
{
int j = 2; // নেস্টেড ব্লক
printf("%d ", j); // 2
}
// j এখানে অ্যাক্সেসযোগ্য নয়
return 0;
}
আউটপুট
1 2
নেস্টেড ব্লকে একই নামের ভেরিয়েবল (Shadowing/Masking)
#include <stdio.h>
int main() {
{
int i = 1;
printf("%d ", i); // 1
}
{
int i = 2; // আলাদা ভেরিয়েবল
printf("%d ", i); // 2
}
return 0;
}
আউটপুট
1 2
ইনার ব্লকে আউটার ভেরিয়েবল মাস্ক করা
#include <stdio.h>
int main() {
int i = 1;
{
int i = 2; // আউটারের i লুকানো হয়
printf("%d ", i); // 2
}
// printf("%d", i); // এখানে 1 প্রিন্ট হতো
return 0;
}
আউটপুট
2
আউটার ভেরিয়েবল ইনার ব্লকে অ্যাক্সেস (যদি রিডিক্লেয়ার না করা হয়)
#include <stdio.h>
int main() {
int i = 1;
{
int j = 2;
printf("%d ", j); // 2
printf("%d ", i); // 1 (আউটারের i অ্যাক্সেসযোগ্য)
}
return 0;
}
আউটপুট
2 1
সারসংক্ষেপ নিয়মাবলী
- গ্লোবাল ভেরিয়েবল: প্রোগ্রামের সব জায়গায় দৃশ্যমান।
- লোকাল ভেরিয়েবল: শুধু ঘোষণা করা ব্লক/ফাংশনে দৃশ্যমান।
- নেস্টেড ব্লক: আউটার স্কোপের ভেরিয়েবল ইনারে দৃশ্যমান, যদি ইনারে সেম নামের ভেরিয়েবল না থাকে।
- শ্যাডোইং: ইনার ব্লকে একই নামের ভেরিয়েবল ডিক্লেয়ার করলে আউটারেরটি লুকায়।
- লাইফটাইম: গ্লোবাল = প্রোগ্রাম রানটাইম; লোকাল = ব্লক এক্সিকিউশন টাইম।