0Pricing
C Academy · درس

extern والعالمي

المشاركة بين الملفات

extern والعالمي درس مجاني في C Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C Academy 4 دروس في المجموع.

المتغيرات العامة

المتغير المعلن خارج أي دالة له نطاق ملف ويستمر طوال البرنامج. ويُسمّى متغيرًا عامًا.

#include <stdio.h>
int counter = 0;
void bump(void) {
    counter++;
}
int main(void) {
    bump();
    bump();
    printf("counter = %d\n", counter);
    return 0;
}

المتغيرات العامة مشتركة

يمكن لكل دالة في الملف قراءة متغير عام والكتابة فيه. وهذا يجعلها مريحة، لكنه يسهل إساءة استخدامها.

#include <stdio.h>
int score = 100;
void penalty(void) { score -= 25; }
void bonus(void) { score += 10; }
int main(void) {
    penalty();
    bonus();
    printf("score = %d\n", score);
    return 0;
}

التهيئة الافتراضية بالصفر

تبدأ المتغيرات العامة من دون مهيئ تلقائيًا بالقيمة 0.

#include <stdio.h>
int total;
int main(void) {
    printf("total = %d\n", total);
    return 0;
}

الكلمة المفتاحية extern

يُصرّح extern عن متغير عام مُعرَّف في مكان آخر. ويُخبر المصرّف بوجود المتغير من دون تخصيص مساحة له.

#include <stdio.h>
int shared = 5;
extern int shared;
int main(void) {
    printf("shared = %d\n", shared);
    return 0;
}

التصريح مقابل التعريف

يخصص التعريف مساحة تخزين، بينما يكتفي التصريح بتسمية شيء ما. ولا تخصص تصريحات extern مساحة تخزين.

#include <stdio.h>
int value = 42;
int main(void) {
    extern int value;
    printf("value = %d\n", value);
    return 0;
}

المشاركة عبر الملفات

في المشاريع متعددة الملفات، يعرّف أحد ملفات .c المتغير العام، وتستخدم الملفات الأخرى extern في ملف ترويسة لرؤيته.

#include <stdio.h>
extern int globalCount;
int globalCount = 3;
int main(void) {
    printf("globalCount = %d\n", globalCount);
    return 0;
}

يمكن أن تكون الدوال extern أيضًا

تتمتع الدوال بارتباط خارجي افتراضيًا، ولذلك يُعد النموذج الأولي لها فعليًا تصريح extern لتلك الدالة.

#include <stdio.h>
extern void hello(void);
void hello(void) {
    printf("Hello from extern\n");
}
int main(void) {
    hello();
    return 0;
}

مدة حياة المتغيرات العامة

توجد المتغيرات العامة منذ بدء البرنامج حتى انتهائه، ولذلك تستمر قيمها عبر جميع استدعاءات الدوال.

#include <stdio.h>
int visits = 0;
void page(void) { visits++; }
int main(void) {
    page();
    page();
    page();
    printf("visits = %d\n", visits);
    return 0;
}

مخاطر المتغيرات العامة

بما أن أي كود يمكنه تغيير متغير عام، يصبح من الصعب تتبع الأخطاء. لذا يُفضَّل تمرير القيم كمعاملات متى أمكن.

#include <stdio.h>
int config = 1;
int compute(int input) {
    return input * config;
}
int main(void) {
    printf("%d\n", compute(8));
    return 0;
}

المتغيرات العامة للقراءة فقط

اجمع بين const والمتغير العام لإنشاء ثابت مشترك لا يمكن لأحد تعديله.

#include <stdio.h>
const int MAX_USERS = 50;
int main(void) {
    printf("MAX_USERS = %d\n", MAX_USERS);
    return 0;
}

نمط عملي

تُعد قيمة إعداد عامة تقرؤها عدة دوال استخدامًا شائعًا ومقبولًا.

#include <stdio.h>
int multiplier = 3;
int scale(int x) { return x * multiplier; }
int main(void) {
    printf("%d\n", scale(4));
    printf("%d\n", scale(7));
    return 0;
}

تحقق سريع

اختبر مدى فهمك لـ extern والمتغيرات العامة.

مراجعة: extern والمتغيرات العامة

لقد تعلمت عن المتغيرات العامة والارتباط الخارجي.

  • المتغيرات العامة متغيرات في نطاق الملف وتستمر طوال البرنامج
  • تبدأ افتراضيًا بالقيمة 0 وتكون مشتركة بين جميع الدوال
  • يصرّح extern عن متغير عام مُعرَّف في مكان آخر
  • يخصص التعريف مساحة، بينما يكتفي التصريح بالتسمية
  • استخدم المتغيرات العامة باعتدال لتجنب الترابط الخفي

الأسئلة الشائعة

هل درس «extern والعالمي» مجاني؟

نعم — نص درس «extern والعالمي» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C Academy 4 دروس في المجموع.

ماذا ستتعلم في «extern والعالمي»؟

المشاركة بين الملفات تتمرن على C Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C Academy؟

لا تُشترط خبرة سابقة. C Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «extern والعالمي»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C Academy هذا؟

نعم. كل درس في C Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. auto والنطاق المحلي
  2. المتغيرات static
  3. extern والعالمي
  4. register وconst
← العودة إلى C Academy