سلام رفقای برنامهنویس! توی این مقاله قراره با یه مفهوم مهم آشنا بشیم: Storage Class یا کلاس حافظه در زبان برنامهنویسی C. هر متغیر نهتنها یه نوع داده داره، بلکه یه کلاس حافظه هم داره که مشخص میکنه متغیر تا کجا قابل دسترسه و چقدر عمر میکنه.
چهار کلاس حافظه در C
- auto یا اتوماتیک
- extern یا خارجی (سراسری)
- static یا ایستا
- register یا ثبات
🔸 متغیر محلی (Automatic)
متغیرهایی که داخل یک بلوک مثل حلقه یا تابع تعریف میشن، کلاس حافظهشون اتوماتیکه و فقط داخل همون محدوده قابل استفادهن.
#include <stdio.h>
int main(void) {
for (int counter = 0; counter < 3; ++counter) {
printf("Looping\n");
}
// printf("%d", counter); // خطا: متغیر خارج از محدودهاش استفاده شده
return 0;
}
تو این مثال، متغیر counter داخل بلوک حلقه تعریف شده و بیرون از اون قابل دسترس نیست.
🔹 متغیر سراسری (External)
اگه متغیر خارج از همه توابع تعریف بشه، بهش میگن متغیر سراسری و در کل برنامه قابل استفادهست.
#include <stdio.h>
int data = 10; // متغیر سراسری
void show();
int main() {
++data;
show();
return 0;
}
void show() {
++data;
printf("data = %d\n", data);
}
خروجی: data = 12
اگه بخوای یه متغیر سراسری رو از فایل دیگهای استفاده کنی، از کلمه کلیدی extern استفاده میکنی. اینطوری کامپایلر میفهمه که متغیر تو یه فایل دیگه تعریف شده.
🔸 متغیر ثبات (Register)
با کلمه کلیدی register میتونی به کامپایلر پیشنهاد بدی که متغیر رو توی ثبات CPU ذخیره کنه، برای دسترسی سریعتر. مثلاً:
register int speedCounter;
البته کامپایلرهای امروزی خودشون خیلی خوب بهینهسازی انجام میدن و این دستور اغلب نادیده گرفته میشه.
🔹 متغیر استاتیک (Static)
با static متغیر طوری تعریف میشه که عمرش تا پایان اجرای برنامه باقی میمونه، حتی اگه داخل تابع باشه.
مثال: متغیر استاتیک در تابع
#include <stdio.h>
void counterUp();
int main() {
counterUp();
counterUp();
return 0;
}
void counterUp() {
static int level = 2; // فقط بار اول مقداردهی میشه
level += 4;
printf("level = %d\n", level);
}
خروجی:
level = 6
level = 10
همونطور که میبینی، مقدار متغیر level بعد از اولین فراخوانی تابع حفظ میشه و تغییرات توی فراخوانیهای بعدی ادامه پیدا میکنن.
👀 جمعبندی
| کلاس حافظه |
دامنه |
طول عمر |
| auto |
بلوک فعلی |
تا پایان بلوک |
| extern |
همه فایلها |
کل برنامه |
| static |
فایل / بلوک |
تا پایان برنامه |
| register |
بلوک فعلی |
تا پایان بلوک |
امیدواریم این آموزش براتون مفید بوده باشه! این مقاله توسط سایت علمی رایشمند برای شما آماده شده است.