حوزه متغیرها (Scope)
متغیرهای محلی و سراسری، حوزه بلوک و دسترسی به متغیرها در C
حوزه (Scope) چیست؟
حوزه تعیین میکند یک متغیر در کدام بخش از برنامه قابل دسترسی باشد. در C دو نوع اصلی داریم: محلی و سراسری.
متغیرهای محلی (Local)
متغیرهایی که داخل تابع یا بلوک تعریف میشوند. فقط در همان محدوده قابل دسترسیاند:
void myFunction() {
int x = 10; // محلی - فقط داخل این تابع
printf("%d", x); // ✅ درست
}
int main() {
myFunction();
printf("%d", x); // ❌ خطا! x اینجا شناخته نمیشود
}
متغیرهای سراسری (Global)
متغیرهایی که بیرون همه توابع تعریف میشوند و همه توابع به آنها دسترسی دارند:
int counter = 0; // سراسری
void increment() {
counter++; // تغییر متغیر سراسری
}
int main() {
increment();
increment();
printf("%d", counter); // 2
}
حوزه بلوک (Block Scope)
هر جفت آکولاد { } یک حوزه جدید میسازد:
int main() {
int x = 10;
if (x > 5) {
int y = 20; // فقط داخل این if
printf("%d", x + y); // ✅
}
printf("%d", y); // ❌ خطا! y اینجا وجود ندارد
}
متغیر محلی همنام با سراسری
متغیر محلی، سراسری همنام را سایهگذاری (shadow) میکند:
int x = 100; // سراسری
int main() {
int x = 50; // محلی - سراسری را میپوشاند
printf("%d", x); // 50
}
مقایسه محلی و سراسری
| ویژگی | محلی | سراسری |
|---|---|---|
| محل تعریف | داخل تابع/بلوک | بیرون همه توابع |
| دسترسی | فقط همان محدوده | همهجا |
| مقدار اولیه | نامعتبر (garbage) | خودکار صفر |
| حافظه | استک (موقت) | تا پایان برنامه |
بهترین شیوهها
- تا جای ممکن از متغیر محلی استفاده کنید — کد قابل پیشبینیتر است
- استفاده زیاد از متغیرهای سراسری باعث باگهای پنهان میشود
- متغیر را در نزدیکترین محل استفاده تعریف کنید
این مبحث بخشی از دوره آموزش کامل زبان C است.