کد تخفیف برای تمام محصولات کارگاه پلاس: R5VYP5US

نکته ۷: طول متغیر int

این سوالی است که اکثر برنامه نویسان تازه کار می پرسند. این در حالی است که اصلا نیاز به چنین چیزی نیست. یک برنامه نویس کامپیوتر طول این نوع متغیر را ۴ بایت می داند، این در حالی است که در میکروکنترلر ها طول این متغیر می تواند ۲ بایت باشد.

سوالات مشابه نیز مانند طول long چقدر است نیز جز این دسته از سوالات است. در نهایت حفظ همه ی این اعداد در تمامی کامپایلر ها بسیار دشوار است و اصلا هم کاربردی نیست. از طرفی تغییر کامپایلر ها توسط برنامه نویسان نیز مشکل فضای متغیر ایجاد می کند به طور مثال، یک برنامه برای AVR نگارش شده و int در کامپایلر آن ۲ بایت تعریف شده است و حال می خواهیم این برنامه را برای ARM کامپایل کنیم که فضای int آن ۴ بایت است. در اینجا هدر رفت فضای حافظه خواهیم داشت، بالعکس آن، شرایط بحرانی تر را شاهد خواهیم بود چرا که طول متغیر برای نگه داری اعداد بیشتر از ۲ بایت مناسب نیست.

برای رفع اینگونه مشکلات در سال های بسیار دور، اسامی دیگری برای این متغیر ها انتخاب کردند که به آن ها Alias Type یا نوع متحد گویند، این در حالی است که هم اکنون نیز از اسامی استاندارد استفاده می شود و باعث می شود که برنامه به صورت دشواری در آینده مورد بازرسی و کامپایل قرار گیرد.

مثال) شما در حال تعریف یک متغیر int هستید:

int a;

این متغیر چند بایت است؟ معلوم نیست! چون کامپایلر معلوم نیست. حال اگر به جای int از alias ها استفاده کنیم:

int32_t a;

حال معلوم است که متغیر دارای چه طولی است، در این مثال ۳۲ بیتی است و می تواند اعداد منفی نیز داشته باشد (در واقع unsigned نیست.)

از این alias ها می توان موارد زیر را نام برد:

متغیر بدون علامت
(فقط مثبت)
متغیر علامت دار
uint8_tint8_t
uint16_tint16_t
uint32_tint32_t
uint64_tint64_t

بهتر است در آینده کد هایی بنویسید که با این ساختار متغیر ها باشند و دیگر از لفظ های int ، short و … به دلایل گفته شده استفاده نکنید.

برای استفاده از این اسامی نیازمند include خاصی هستیم؟

بله، می بایست stdint.h را include کنید تا بتوانید از alias ها استفاده کنید.

#include <stdint.h>

آیا alias های دیگری وجود دارند؟

بله، به طور مثال U8 همان uint8_t است. در هر شکل، خلاصه سازی alias ها و… ، نام آن ها کاملا مشخص کننده ی چند بیتی بودن و تعیین وضعیت علامت دار بودن است.

این اسامی مختلف، می تواند توسط خود شما هم تعریف شود و یا توسط یک کتابخانه دیگر که به پروژه خود اضافه کرده اید قابل دسترس باشد.

در این صورت کدام alias را استفاده کنیم؟

هدر فایل stdint.h در تمامی کامپایلر های C وجود دارد و اسامی بیان شده در جدول بالا استاندارد‌ترین نام گذاری alias‌ها است.

آیا در float هم alias وجود دارد؟

در تقریبا تمامی کامپایلر ها طول float برابر با ۴ بایت است و alias برای آن وجود ندارد. علت این موضوع وجود استاندارد اعداد شناور IEEE754 است.

گرچه برخی اصطلاحات مانند float32_t و float64_t نیز وجود دارند اما هیچگاه در کامپایلر ها مگر در موارد خاص دیده نشده است. لذا همان نام float برای استفاده مناسب است.

ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *