
در آردوینو، size_t یک نوع دادهی صحیح بدون علامت (unsigned integer) است که برای نگهداری اندازهها و تعدادها طراحی شده است.
این نوع داده هرگز نمیتواند عدد منفی باشد — چون منفی بودن برای «تعداد عناصر» یا «طول یک آرایه» معنی ندارد!
اندازهی دقیق size_t بسته به پلتفرم متفاوت است: — در بردهای AVR (مثل Uno): ۲ بایت → محدوده: ۰ تا ۶۵,۵۳۵
— در بردهای ۳۲ بیتی (مثل ESP32 یا Due): ۴ بایت → محدوده: ۰ تا ۴,۲۹۴,۹۶۷,۲۹۵
هدف اصلی size_t این است که کدها را قابل انتقالتر (portable) کند — چون همیشه به اندازهی طبیعی پردازنده برای ذخیرهی اندازهها تنظیم میشود.
بسیاری از توابع استاندارد آردوینو و کتابخانههای C++ (مثل strlen()، sizeof()، یا String.length()) مقدار بازگشتی خود را به عنوان size_t تعریف میکنند.
مثال:
String message = "سلام";
size_t len = message.length(); // len = 4 (تعداد کاراکترها)
اگر شما از int برای ذخیرهی این مقدار استفاده کنید، در بردهای ۳۲ بیتی ممکن است هشدار کامپایلر دریافت کنید یا در موارد نادر، سرریز رخ دهد.
اما با size_t، همیشه با نوع صحیح کار میکنید.
شما معمولاً size_t را در متغیرهایی میبینید که با حلقههای شمارشی یا اندازهی آرایهها سروکار دارند:
int values[] = {10, 20, 30, 40};
size_t count = sizeof(values) / sizeof(values[0]); // count = 4
for (size_t i = 0; i < count; i++) {
Serial.println(values[i]);
}
استفاده از size_t در حلقهها نهتنها منطقیتر است (چون شمارنده هرگز منفی نمیشود)، بلکه با استانداردهای برنامهنویسی مدرن هم هماهنگ است.
void printString(const char* str) {
size_t len = strlen(str); // strlen() از size_t استفاده میکند
for (size_t i = 0; i < len; i++) {
Serial.print("کاراکتر ");
Serial.print(i);
Serial.print(": ");
Serial.println(str[i]);
}
}
اگر شما مبتدی هستید، کاملاً میتوانید از int یا unsigned int برای شمارندهها استفاده کنید و مشکلی پیش نمیآید.
اما وقتی کد شما بزرگتر میشود یا میخواهید آن را با دیگران به اشتراک بگذارید، استفاده از size_t نشاندهندهی سبک برنامهنویسی حرفهای است — چون دقیقاً همان نوعی را به کار میبرید که سیستم استفاده میکند.
چون size_t بدون علامت است، اگر آن را با یک عدد منفی مقایسه کنید، نتیجه غیرمنتظره خواهد بود:
size_t x = 5;
if (x > -1) {
// این شرط FALSE است! چون -1 به عدد بسیار بزرگی تبدیل میشود
Serial.println("این چاپ نمیشود!");
}
بنابراین، هرگز size_t را با اعداد منفی مقایسه نکنید — و همیشه به یاد داشته باشید: این نوع فقط برای مقادیر ≥ ۰ طراحی شده است.
size_t = نوعی برای اندازهها و تعدادهاstrlen() و sizeof() از آن استفاده میکننداین مطلب بر اساس مستندات رسمی Arduino از بخش size_t – Language Reference تهیه شده است، با توضیحات سادهشده، مثالهای کاربردی و نکات طلایی منحصربهفرد برای جامعه فارسیزبان.
برچسب های مهم