لینک کوتاه مطلب : https://hsgar.com/?p=4470

typedef در زبان سی به چه دردی می‌خورد؟

وقتی برای اولین بار به typedef در کتاب مقدمه‌ای بر زبان سی برخوردم آن را بیهوده پنداشتم. typedef این گونه تعریف شده بود کار آن تعریف نوع جدید است. یعنی اینکه می‌توانید به جای int یک نوع دیگر مثلا int1 داشته باشید. یعنی حالا هم int دارید و هم int1 که عملا هیچ تفاوتی با هم ندارند فقط نام‌هایشان متفاوت است. با خود گفتم این چه کاری است خوب از همان int استفاده می‌کنیم چرا باید یک کپی از int به یک اسم دیگر داشته باشیم.

تا اینکه امروز وقتی به عبارت زیر در فایل‌های کتابخانه SDL برخوردم فهمیدم که طراحان این typedef دلیل خوبی برای طراحی آن داشتند:

 extern DECLSPEC int SDLCALL SDL_Init(Uint32 flags);

در اینجا یک تابع به نام SDL_init اعلان شده است که آرگومان به نام flags از نوع Unit32 می‌گیرد. وقتی بیشتر بررسی کردیم دریافتم که Unit32 همان Unit32_t است که با استفاده از typedef یک کپی برابر اصل فقط با نام دیگر به وجود آمده است آن در فایل SDL_stdinc.h بود. ناگفته نماند که عبارت اول در فایل SDL.h بود.

ولی من Unit32_t را نیز نمی‌شناختم وقتی بیشتر بررسی کردم دیدم که Unit32_t همان unsigned int است که با استفاده از typedef این نام را گرفته است.

خوب typedef به دو کار می‌آید اول آنکه گاهی اوقات از لحاظ مفهومی ما نیاز به دو نوع یکسان با اسم مختلف داریم. برای مثال می‌خواهیم در بعضی از توابع از یک نام و در برخی دیگر از نام‌ دیگر استفاده کنیم.

دلیل دیگر که احتمال می‌دهم دلیل توسعه دهندگان کتابخانه SDL در استفاده از آن است قابل حمل کردن برنامه است. اگر جستجو کنید می‌بینید که نوع Unit32_t توسط برخی نسخه‌های C ارائه شده است، اما همه کامپایلرها آن را نمی‌شناسند پس بهتر است که اگر زمانی که کاربر از این نوع استفاده کرد و برنامه‌اش بالا گرفت و به سطح جهانی رسید بتواند روی تمامی سیستم‌ها به خوبی اجرا شود و این کار شدنی است چون عملا Unit32 به صورت unsigned int تعریف شد است که توسط همه کامپایلرها شناخته می‌شود.

ارسال یک پاسخ

آدرس ایمیل شما منتشر نخواهد شد.