العودة إلى الدورة

مقدمة عن المتغيرات والدوال الثابتة (static)

لغة C: من الصفر إلى الاحتراف - الدليل الشامل للمبتدئين

الدرس 58: مقدمة عن المتغيرات والدوال الثابتة (static)

لكلمة static المفتاحية معانٍ مختلفة بناءً على ما إذا كانت تُطبق داخل دالة، أو على متغير عالمي، أو على دالة.

1. المتغيرات المحلية الثابتة (تمديد العمر)

عندما يتم التصريح عن متغير محلي كـ static ، يظل نطاقه محلياً للدالة، ولكن يتم تمديد عمره ليشمل مدة البرنامج بالكامل. فهو يحتفظ بقيمته بين استدعاءات الدوال.

c void count_calls() { static int call_count = 0; // يتم تهيئته مرة واحدة فقط call_count++; printf("تم استدعاء الدالة %d مرات.\n", call_count); }

int main() { count_calls(); // 1 count_calls(); // 2 return 0; }

2. المتغيرات العالمية الثابتة (تحديد الرؤية)

عندما يتم التصريح عن متغير عالمي كـ static ، تقتصر رؤيته (الربط) على الملف الذي تم تعريفه فيه فقط. ولا يمكن الوصول إليه من ملفات أخرى باستخدام كلمة extern .

  • الفائدة: يمنع تضارب الأسماء ويفرض الكبسولة داخل الوحدة.

3. الدوال الثابتة (تحديد الرؤية)

عندما يتم التصريح عن دالة كـ static ، يمكن استدعاؤها فقط من داخل نفس ملف المصدر الذي عُرفت فيه. هذا ينشئ دوال مساعدة "خاصة" بالوحدة.

c // utility.c static void internal_logger(char *msg) { ... } // لا يمكن استدعاؤها من main.c

void public_function() { internal_logger("تم استدعاء الدالة العامة"); // مسموح }