الدرس 24: قواعد النطاق: المتغيرات المحلية والعالمية
يحدد النطاق (Scope) منطقة البرنامج التي يمكن فيها الوصول إلى معرف تم التصريح عنه (متغير، دالة، إلخ).
1. النطاق المحلي (المتغيرات التلقائية)
- المتغيرات التي يتم التصريح عنها داخل دالة، أو كتلة (
{})، أو كمعلمات للدالة. - نطاقها يقتصر على تلك الكتلة.
- يتم إنشاؤها عند دخول الكتلة وتدميرها عند الخروج منها.
c void example_func() { int x = 10; // محلي لـ example_func if (x > 5) { int y = 20; // محلي لكتلة if printf("y هي %d\n", y); } // يتم تدمير y هنا // printf("y هي %d\n", y); // خطأ: y خارج النطاق }
2. النطاق العالمي (المتغيرات الخارجية)
- المتغيرات التي يتم التصريح عنها خارج أي دالة.
- يمتد نطاقها من نقطة التصريح حتى نهاية الملف.
- يمكن الوصول إليها وتعديلها بواسطة أي دالة في البرنامج (وربما ملفات أخرى).
c int GLOBAL_COUNTER = 0; // متغير عالمي
void increment() { GLOBAL_COUNTER++; // يمكن الوصول إليه هنا }
int main() { increment(); printf("العداد: %d\n", GLOBAL_COUNTER); // يمكن الوصول إليه هنا return 0; }
فئات التخزين (ذكر موجز)
تتحكم محددات فئة التخزين مثل auto و extern و static و register في النطاق والعمر والربط للمتغيرات. سنركز على static لاحقاً، والتي تسمح للمتغير بالاحتفاظ بقيمته بين استدعاءات الدوال، حتى لو تم تعريفه محلياً.