المتغيرات static
متغيرات محلية مستمرة
المتغيرات static درس مجاني في C Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C Academy 4 دروس في المجموع.
الكلمة المفتاحية static
يحتفظ المتغير المحلي من نوع static بقيمته بين استدعاءات الدالة. وتمتد مدة حياته طوال البرنامج.
#include <stdio.h>
void f(void) {
static int count = 0;
count++;
printf("count = %d\n", count);
}
int main(void) {
f();
f();
f();
return 0;
}التهيئة مرة واحدة
تُهيَّأ متغيرات static مرة واحدة فقط، في أول تشغيل للدالة. وتتخطى الاستدعاءات اللاحقة عبارة التهيئة.
#include <stdio.h>
void f(void) {
static int x = 100;
printf("x = %d\n", x);
x += 10;
}
int main(void) {
f();
f();
return 0;
}الصفر الافتراضي
على عكس متغيرات auto، يبدأ متغير static من دون مهيئ بالقيمة 0.
#include <stdio.h>
void f(void) {
static int n;
printf("n = %d\n", n);
n++;
}
int main(void) {
f();
f();
return 0;
}عدّ الاستدعاءات
من الاستخدامات الشائعة عدّ عدد مرات استدعاء دالة.
#include <stdio.h>
int nextId(void) {
static int id = 0;
return ++id;
}
int main(void) {
printf("%d %d %d\n", nextId(), nextId(), nextId());
return 0;
}مدة حياة static، ونطاق محلي
يظل المتغير المحلي من نوع static ذا نطاق محلي. ولا تستطيع رؤيته إلا الدالة نفسها، لكنه يحتفظ بقيمته بين الاستدعاءات.
#include <stdio.h>
void tick(void) {
static int t = 0;
t++;
printf("tick %d\n", t);
}
int main(void) {
tick();
tick();
return 0;
}static مقابل auto
قارن بينهما: يُعاد ضبط عدّاد auto في كل استدعاء، بينما يتراكم عدّاد static.
#include <stdio.h>
void autoCounter(void) {
int c = 0;
c++;
printf("auto: %d\n", c);
}
int main(void) {
autoCounter();
autoCounter();
return 0;
}static في نطاق الملف
في نطاق الملف، يعني static الارتباط الداخلي، أي إن المتغير يكون خاصًا بملف المصدر الخاص به.
#include <stdio.h>
static int secret = 7;
int main(void) {
printf("secret = %d\n", secret);
return 0;
}التخزين المؤقت باستخدام static
يمكن للمتغيرات من نوع static تخزين قيمة محسوبة مؤقتًا، بحيث تُحسب مرة واحدة فقط.
#include <stdio.h>
int getBase(void) {
static int base = 0;
if (base == 0) {
base = 50;
printf("computed once\n");
}
return base;
}
int main(void) {
printf("%d\n", getBase());
printf("%d\n", getBase());
return 0;
}تراكم الحالة
تتيح المتغيرات المحلية من نوع static للدالة تذكّر المجموع المتراكم من دون استخدام متغير عام.
#include <stdio.h>
int addToTotal(int v) {
static int total = 0;
total += v;
return total;
}
int main(void) {
printf("%d\n", addToTotal(10));
printf("%d\n", addToTotal(5));
return 0;
}تنبيه
تجعل الحالة الثابتة الدالة تعتمد على سجل الاستدعاءات السابقة، مما قد يصعّب اختبارها. استخدمها عن قصد.
#include <stdio.h>
int stepNumber(void) {
static int s = 0;
return ++s;
}
int main(void) {
printf("step %d\n", stepNumber());
printf("step %d\n", stepNumber());
return 0;
}الدمج مع الحلقات
يحتفظ المتغير المحلي من نوع static داخل جسم الحلقة بقيمته عبر التكرارات والاستدعاءات معًا.
#include <stdio.h>
void run(void) {
static int seen = 0;
for (int i = 0; i < 2; i++)
seen++;
printf("seen = %d\n", seen);
}
int main(void) {
run();
run();
return 0;
}تحقق سريع
اختبر مدى فهمك للمتغيرات من نوع static.
مراجعة: متغيرات static
لقد تعلمت عن المتغيرات المحلية المستمرة.
- تستمر المتغيرات المحلية من نوع
staticطوال البرنامج - تُهيَّأ مرة واحدة وتبدأ افتراضيًا بالقيمة 0
- تحافظ على نطاقها المحلي وتحتفظ بقيمها
- يمنح
staticفي نطاق الملف ارتباطًا داخليًا - تُعد مفيدة جدًا للعدادات والتخزين المؤقت
الأسئلة الشائعة
هل درس «المتغيرات static» مجاني؟
نعم — نص درس «المتغيرات static» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C Academy 4 دروس في المجموع.
ماذا ستتعلم في «المتغيرات static»؟
متغيرات محلية مستمرة تتمرن على C Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C Academy؟
لا تُشترط خبرة سابقة. C Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «المتغيرات static»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C Academy هذا؟
نعم. كل درس في C Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- auto والنطاق المحلي
- المتغيرات static
- extern والعالمي
- register وconst