حوزه متغیرها (Scope)
«حوزه متغیرها (Scope)» یعنی هر متغیر (Variable) کجا قابل دسترسی است. در C، متغیر فقط در ناحیه ساخته شدنش دیده می شود. مثل کلاس های مدرسه؛ هر کلاس قوانین خودش را دارد. این قانون، کد را منظم و قابل فهم می کند.
تعریف ساده اسکوپ
در C، متغیر خارج از محدوده خودش دیده نمی شود. این محدوده را «اسکوپ (Scope)» می نامیم.
حوزه محلی (Local Scope)
متغیر داخل تابع، «محلی» است. فقط همان جا استفاده می شود.
void myFunction() {
int x = 5;
printf("%d", x);
}
int main() {
myFunction();
return 0;
}
خارج از تابع، این متغیر وجود ندارد. تلاش برای دسترسی، خطا می دهد.
void myFunction() {
int x = 5;
}
int main() {
myFunction();
printf("%d", x);
return 0;
}
حوزه سراسری (Global Scope)
متغیر بیرون از توابع، «سراسری» است. همه جا دیده می شود.
int x = 5;
void myFunction() {
printf("%d", x);
}
int main() {
myFunction();
printf("%d", x);
return 0;
}
اگر نام یکسان بدهی، دو متغیر جدا داریم؛ محلی و سراسری.
int x = 5;
void myFunction() {
int x = 22;
printf("%d\n", x);
}
int main() {
myFunction();
printf("%d\n", x);
return 0;
}
هشدار: نام یکسان گیج کننده است. بهتر است از نام های روشن استفاده شود.
دقت کن؛ هر تابع می تواند متغیر سراسری را تغییر دهد.
int x = 5;
void myFunction() {
printf("%d\n", ++x);
}
int main() {
myFunction();
printf("%d\n", x);
return 0;
}
گام های عملی
- نیازت را مشخص کن؛ محلی یا سراسری.
- متغیر را در جای درست تعریف کن.
- نام های واضح بگذار تا اشتباه نشود.
نکته: برای مرور «پارامترها»، به پارامترهای تابع برو. اگر می خواهی درباره اعلان توابع بخوانی، صفحه اعلان توابع مفید است. همچنین، برای تمرین بیشترِ «حوزه متغیرها»، همین صفحه حوزه متغیرها را نگه دار.
جمع بندی سریع
- محلی، فقط داخل همان تابع است.
- سراسری، در همه توابع دیده می شود.
- نام تکراری، دو متغیر جدا می سازد.
- تغییر سراسری، همه جا اثر دارد.
- نام ها را روشن و دقیق بگذار.