تخطَّ إلى المحتوى

🇨 شرح لغة C

الدوال: النطاق والاستدعاء الذاتي

الدرس 13 من 25· ⏱ 1 دقائق قراءة

التصريح المسبق (Prototype)

أعلن الدالة قبل main أو ضع نموذجها في الأعلى:

int add(int a, int b);   // النموذج

int main() {
    printf("%d\n", add(2, 3));
    return 0;
}

int add(int a, int b) {  // التعريف
    return a + b;
}

التمرير بالقيمة

C تمرّر نسخة من المتغيّر افتراضيًا، فالتعديل داخل الدالة لا يؤثّر على الأصل. لتعديل الأصل مرّر مؤشّرًا:

void doubleIt(int *n) {
    *n *= 2;
}
int x = 5;
doubleIt(&x);    // x الآن 10

النطاق (Scope)

المتغيّر المعرّف داخل دالة محلّي لها فقط. المتغيّرات العامة تُعرَّف خارج كل الدوال.

الاستدعاء الذاتي (Recursion)

int factorial(int n) {
    if (n <= 1) return 1;       // حالة التوقّف
    return n * factorial(n - 1);
}

⚠️ كل استدعاء ذاتي يحتاج حالة توقّف، وإلا حدث طفحان للمكدّس (stack overflow).

🎯 التالي: المؤشّرات المتقدّمة.

هل كان هذا الدرس مفيدًا؟