typedef
«typedef در C» یک نام مستعار برای «نوع داده (Type)» می سازد. بنابراین کد کوتاه تر و خواناتر می شود. همچنین نگهداری ساده تر می شود.
ایده اصلی typedef
«نام مستعار» یعنی همان نوع قبلی، با اسمی دوستانه تر. بنابراین اعلام ها ساده تر می شوند.
#include <stdio.h>
typedef float Temperature;
int main() {
Temperature today = 25.5f;
Temperature tomorrow = 18.6f;
printf("Today: %.1f C\n", today);
printf("Tomorrow: %.1f C\n", tomorrow);
return 0;
}
نکته: با typedef فقط نام تغییر می کند؛ ماهیت نوع همان است.
typedef کنار ساختارها (struct)
با typedef دیگر لازم نیست همیشه کلمه struct را تکرار کنی.
#include <stdio.h>
struct Car {
char brand[30];
int year;
};
typedef struct {
char brand[30];
int year;
} Car;
int main() {
struct Car car1 = {"BMW", 1999};
Car car2 = {"Ford", 1969};
printf("%s %d\n", car1.brand, car1.year);
printf("%s %d\n", car2.brand, car2.year);
return 0;
}
هشدار: typedef نوع جدید نمی سازد؛ فقط یک نام کوتاه تر می دهد.
نمونه عملی با چند ماشین
خوانایی بهتر می شود، چون اسم نوع هدف را نشان می دهد.
#include <stdio.h>
typedef struct {
char brand[30];
char model[30];
int year;
} Car;
int main() {
Car car1 = {"BMW", "X5", 1999};
Car car2 = {"Ford", "Mustang", 1969};
Car car3 = {"Toyota", "Corolla", 2011};
printf("%s %s %d\n", car1.brand, car1.model, car1.year);
printf("%s %s %d\n", car2.brand, car2.model, car2.year);
printf("%s %s %d\n", car3.brand, car3.model, car3.year);
return 0;
}
typedef و ساختار تو در تو
وقتی ساختارها تو در تو هستند، typedef کد را کوتاه و شفاف می کند.
#include <stdio.h>
typedef struct {
char firstName[20];
char lastName[20];
} Owner;
typedef struct {
char brand[20];
int year;
Owner owner;
} Car;
typedef struct {
char name[30];
Car featuredCar;
} Dealership;
int main() {
Owner person = {"John", "Doe"};
Car car1 = {"Toyota", 2010, person};
Dealership d = {"City Motors", car1};
printf("Dealership: %s\n", d.name);
printf("Featured Car: %s (%d), owned by %s %s\n",
d.featuredCar.brand,
d.featuredCar.year,
d.featuredCar.owner.firstName,
d.featuredCar.owner.lastName);
return 0;
}
چرا از typedef استفاده کنیم؟
- کد کوتاه تر و شفاف تر می شود.
- هدف متغیر را بهتر نشان می دهد.
- با struct و enum عالی می شود.
نکته: اگر نیاز داری همزمان چند مقدار را ذخیره کنی، فصل ساختارها را ببین. همچنین تفاوت با یونیون ها مهم است.
تمرین سریع: سه گام
- یک typedef برای unsigned long بساز.
- چند متغیر با آن نام جدید اعلام کن.
- چاپ کن و تفاوت خوانایی را ببین.
جمع بندی سریع
- typedef فقط نام را تغییر می دهد.
- کنار struct عالی عمل می کند.
- کد را کوتاه و واضح می کند.
- برای پروژه های بزرگ فوق العاده است.