حوزه متغیرها در زبان C
حوزه (Scope) یک منطقه از برنامه می باشد، در کل متغیرها را می توان در سه حوزه زیر تعریف کرد:
- داخل یک تابع یا یک بلوک (متغیرهای محلی)
- به عنوان پارامترهای یک تابع (پارامترهای رسمی)
- خارج از تمام توابع و حوزه ها (متغیرهای سراسری)
متغیرهای محلی (Local Variables)
متغیرهایی که در داخل یک تابع یا یک حوزه تعریف شده باشند، به عنوان متغیرهای محلی در نظر گرفته می شوند. این نوع متغیرها فقط می توانند در داخل تابع یا حوزه ای که تعریف شده اند مورد استفاده قرار گیرند.
در مثال زیر متغیرهای a، b و c به عنوان متغیرهای محلی تعریف شده اند:
1 2 3 4 5 6 7 8 9 10 11 12 | #include <stdio.h> int main () { /* local variable declaration */ int a, b; int c; /* actual initialization */ a = 10; b = 20; c = a + b; printf ("value of a = %d, b = %d and c = %d\n", a, b, c); return 0; } |
متغیرهای سراسری (Global Variables)
متغیرهای سراسری خارج از تمام توابع و حوزه، معمولا در بالای برنامه تعریف می شوند. متغیرهای سراسری مقدار خود را تاز مانی که برنامه در حال اجرا باشد، حفظ می کنند. متغیرهای سراسری می توانند در همه توابع و حوزه ها استفاده شوند. به عبارت دیگر، متغیرهای سراسری برای استفاده شدن در کل بخش های برنامه تعریف می شود.
در مثال زیر متغیرهای a و b به عنوان متغیرهای محلی و متغیر g به عنوان متغیر سراسری تعریف شده اند:
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include <stdio.h> /* global variable declaration */ int g; int main () { /* local variable declaration */ int a, b; /* actual initialization */ a = 10; b = 20; g = a + b; printf ("value of a = %d, b = %d and g = %d\n", a, b, g); return 0; } |
در یک برنامه متغیرهای محلی و سراسری می توانند نام مشابهی داشته باشند، اما در داخل یک حوزه یا تابع متغیر محلی بر متغیر سراسری اولویت دارد.
مثلا:
1 2 3 4 5 6 7 8 9 | #include <stdio.h> /* global variable declaration */ int g = 20; int main () { /* local variable declaration */ int g = 10; printf ("value of g = %d\n", g); return 0; } |
زمانی که کد بالا توسط کامپایلر زبان C و اجرا شود نتیجه زیر را تولید خواهد کرد:
1 | value of g = 10 |
پارامترها
پارامترهای یک تابع در حوزه متغیرهای محلی قرار می گیرند و اولویت آن ها از متغیرهای سراسری بیشتر است.
به مثال زیر توجه کنید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include <stdio.h> /* global variable declaration */ int a = 20; int main () { /* local variable declaration in main function */ int a = 10; int b = 20; int c = 0; printf ("value of a in main() = %d\n", a); c = sum( a, b); printf ("value of c in main() = %d\n", c); return 0; } /* function to add two integers */ int sum(int a, int b) { printf ("value of a in sum() = %d\n", a); printf ("value of b in sum() = %d\n", b); return a + b; } |
زمانی که کد بالا کامپایل و اجرا شود، نتیجه زیر را تولید خواهد کرد:
1 2 3 4 | value of a in main() = 10 value of a in sum() = 10 value of b in sum() = 20 value of c in main() = 30 |
مقداردهی اولیه به متغیرهای محلی و سراسری
هنگام تعریف یک متغیر سراسری اگه به آن مقداری اختصاص نیابد، سیستم به طور خودکار مقدار پیش فرض نوع متغیر را به آن اختصاص می دهد. اما متغیرهای محلی هنگام تعریف شدن توسط سیستم مقداردهی اولیه نمی شوند.
در جدول زیر مقادیر پیش فرض برای انواع داده اصلی در زبان C را مشاهده می کنید:
نوع داده | مقدار پیش فرض |
int | 0 |
char | ‘\0’ |
float | 0 |
double | 0 |
pointer | NULL |
توصیه می شود همیشه مقدار اولیه متغیرها را مشخص کنید، زیرا ممکن است با نتایج غیر منتظره ای در هنگام اجرای برنامه رو به رو شوید. اگر به یک متغیر مقدار اولیه داده نشود، با مقادیر زباله پر خواهد شد.
هیچ نظری ثبت نشده است