স্কোপ (Scope) কী?
স্কোপ নির্ধারণ করে কোন ভেরিয়েবল কোন ব্লক/ফাংশনে দৃশ্যমান (visible) এবং অ্যাক্সেসযোগ্য।
লোকাল স্কোপ (Local Scope)
- ব্লক/ফাংশনের ভিতরে ডিক্লেয়ার করা ভেরিয়েবল।
- শুধু সেই ব্লক/ফাংশনের ভিতরেই দৃশ্যমান।
- ফাংশন শেষ হলে নষ্ট হয়।
- অন্য ফাংশন থেকে অ্যাক্সেস করা যায় না।
গ্লোবাল স্কোপ (Global Scope)
- সকল ফাংশনের বাইরে ডিক্লেয়ার করা ভেরিয়েবল।
- প্রোগ্রামের যেকোনো জায়গা থেকে দৃশ্যমান ও অ্যাক্সেসযোগ্য।
- প্রোগ্রাম শুরু হলে তৈরি, প্রোগ্রাম শেষ হলে নষ্ট হয়।
উদাহরণ: গ্লোবাল vs লোকাল
#include <stdio.h>
int r = 50; // গ্লোবাল
void fun();
int main() {
int p = 30; // লোকাল (main-এ)
printf("p = %d, r = %d\n", p, r);
fun();
return 0;
}
void fun() {
// p এখানে অ্যাক্সেসযোগ্য নয়
printf("r = %d\n", r); // গ্লোবাল r অ্যাক্সেসযোগ্য
}
আউটপুট
p = 30, r = 50 r = 50
ফাংশন-স্কোপ উদাহরণ: স্ব্যাপ (Swap)
কল বাই ভ্যালু (লোকাল কপি) — কাজ করে না
#include <stdio.h>
void swap(int a, int b) {
int c = a; a = b; b = c; // লোকাল কপি পরিবর্তিত হয়
}
int main() {
int a = 10, b = 20;
printf("Before: a=%d, b=%d\n", a, b);
swap(a, b);
printf("After: a=%d, b=%d\n", a, b); // অপরিবর্তিত
return 0;
}
আউটপুট
Before: a=10, b=20 After: a=10, b=20
কল বাই রেফারেন্স (গ্লোবাল বা পয়েন্টার) — কাজ করে
#include <stdio.h>
int a = 10, b = 20; // গ্লোবাল
void swap() {
int c = a; a = b; b = c; // গ্লোবাল সরাসরি মডিফাই
}
int main() {
printf("Before: a=%d, b=%d\n", a, b);
swap();
printf("After: a=%d, b=%d\n", a, b);
return 0;
}
আউটপুট
Before: a=10, b=20 After: a=20, b=10
নেস্টেড ব্লক স্কোপ
int i = 1;
{
int i = 2; // আউটারের i মাস্ক হয়
printf("%d ", i); // 2
}
printf("%d", i); // 1
সারসংক্ষেপ
- লোকাল ভেরিয়েবল ফাংশন/ব্লকে সীমাবদ্ধ।
- গ্লোবাল ভেরিয়েবল সব জায়গা থেকে অ্যাক্সেসযোগ্য।
- একই নামের লোকাল ভেরিয়েবল গ্লোবালকে মাস্ক (mask) করে।
- সুন্দর কোডের জন্য গ্লোবাল ভেরিয়েবল কম ব্যবহার করুন।