کلاس های ذخیره سازی (Storage Classes)
کلاس ذخیره سازی تعیین می کند متغیر (Variable) کِی زنده است، کجا دیده می شود، و کجا ذخیره می شود. مثل نگهداری وسایل در کیف، کمد، یا انبار مدرسه.
کلاس های ذخیره سازی در C
چهار مورد اصلی داریم: auto، static، register و extern. «دامنه (Scope)» یعنی کجا استفاده می شود؛ «طول عمر» یعنی تا کی می ماند.
نکته: برای تفاوت «دامنه» و «کلاس ذخیره سازی»، صفحه دامنه C را ببین.
auto
برای متغیر محلی است. داخل تابع، پیش فرض همان auto است. معمولاً ننویسیم، چون خود int x کافی است.
#include <stdio.h>
int main() {
auto int x = 50;
printf("%d\n", x);
return 0;
}
static
static دو کاربرد دارد: 1) متغیر محلی ارزشش بین فراخوانی ها می ماند. 2) موجودیت سراسری فقط در همان فایل دیده می شود.
#include <stdio.h>
void count() {
static int myNum = 0;
myNum++;
printf("num = %d\n", myNum);
}
int main() {
count();
count();
count();
return 0;
}
register
به کامپایلر می گوید متغیر را در رجیستر CPU بگذارد. امروز اغلب بی اثر است؛ کامپایلر خودش انتخاب می کند.
#include <stdio.h>
int main() {
register int counter = 0;
printf("Counter: %d\n", counter);
return 0;
}
extern
extern یعنی «تعریفش جای دیگر است». وقتی چند فایل داری، در یکی اعلان می کنی و در دیگری تعریف می کنی.
فایل 1: main.c
#include <stdio.h>
extern int shared;
int main() {
printf("shared = %d\n", shared);
return 0;
}
فایل 2: data.c
int shared = 50;
کامپایل چند فایل باهم
دو فایل را باهم بده تا یک خروجی ساخته شود.
/* ترمینال:
gcc main.c data.c -o program
*/
گام های عملی
- تصمیم بگیر متغیر محلی یا سراسری است.
- برای ماندگاری مقدار، از
staticاستفاده کن. - برای چند فایل، با
externاعلان کن. - همه فایل ها را باهم کامپایل کن.
نکته: برای چیدمان فایل ها، صفحه سازماندهی کد را ببین. برای عملگرهای بیتی هم به عملگرهای بیتی برو.
جمع بندی سریع
autoپیش فرض متغیر محلی است.staticمقدار را نگه می دارد.registerبیشتر نمادین است.externبین فایل ها پل می زند.