زبان برنامهنویسی C، دستور ویژهای را معرفی میکند که اجازه میدهد تا کاربران بتوانند نام جدیدی برای نوع داده تعریف کنند. نام جدید معادل نوع داده مورد نظر خواهد بود. این کار به کمک کلمه کلیدی typedef انجام میگیرد. در واقع در اینجا، کلاس جدیدی از دادهها ایجاد نمیگردد، بلکه برای نوع داده موجود نام جدیدی تعریف میگردد. پس از آنکه نام جدید برای نوع داده مورد نظر تعریف گردید، میتوان متغیرها، آرایهها، ساختارها و غیره را برحسب نوع داده جدید توصیف کرد.
شکل کلی دستور typedef به صورت زیر است.
typedef type name ;
یا
typedef type new-type ;
که در آن type هریک از نوع دادههای مجاز است و name یا new-type نیز نام جدید برای این نوع است. در واقع type یا یکی از نوع دادههای استاندارد (مانند int، float، char و…) یا نوع داده تعریف شده کاربر است که قبلاً تعریف کردیم. به هرحال باید توجه کرد که نوع داده جدید فقط از نظر نام آن جدید است وگرنه همان طور که گفتیم، کلاس جدیدی از دادهها نیست.
مثال به دستور زیر توجه کنید.
typedef int age ;
در این دستور، برای نوع داده int، نام جدید age انتخاب شده است. بنابراین از این لحظه به بعد هر کجا نیاز باشد که دادهای به صورت int تعریف شود، میتوان آن را با نوع age تعریف کرد. بنابراین دو توصیف زیر همارزند.
age a , b ;
int a , b ;
همین طور در دستورهای
typedef float height[100] ;
height a , b ;
دستور اول، height را آرایهای ۱۰۰ عنصری از نوع float تعریف میکند. دستور دوم، a و b را آرایههای ۱۰۰ عنصری از نوع float توصیف میکنند.
راه همارز دیگری برای بیان دو دستور بالا عبارت است از
typedef float height ;
height a[100] , b[100] ;
گرچه روش قبلی سادهتر است.
ویژگی typedef، خصوصاً در تعریف ساختارها، کار را سادهتر میکند و کاربر را از نوشتن تکراری کلمه کلیدی struct خلاص میکند. در چند مثال قبل در مورد ساختارها نیز از این دستور استفاده شد.
در شکل کلی، نوع ساختاری که کاربر تعریف میکند به صورت زیر است.
typedef struct {
member 1 ;
member 2 ;
…
member m ;
} new-type ;
که در آن new-type نوع ساختار تعریف شده کاربر است. حال متغیرهای ساختار برحسب این نوع داده جدید (درواقع نام جدید برای نوع داده) تعریف میشوند.
مثال دستورهای زیر برای تعریف متغیرهای ساختار به کار میرود. در اینجا برای شرح ساختار از نوع داده تعریف شده کاربر استفاده شدهاست.
typedef struct {
int acct_no ;
char acct_type ;
char name[80] ;
float balance ;
} Trecord ;
Trecord oldcustomer , newcustomer ;
Trecord از نوع داده تعریف شده کاربر توصیف شده است و متغیرهای oldcustomer و newcustomer که ساختارند از نوع Trecord تعریف شدهاند.
مثال دستورهای زیر نمونه دیگری از کاربرد دستور typedef را نمایش میدهد.
typedef struct {
int day ;
int month ;
int year ;
} date ;
typedef struct {
int st_no ;
char name[20] ;
date test ;
} student ;
student Pnoor [100];