"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > لماذا يتم إلغاء توقيع `size_t` في C/C++: ضرورة تاريخية أم مغناطيس أخطاء حديث؟

لماذا يتم إلغاء توقيع `size_t` في C/C++: ضرورة تاريخية أم مغناطيس أخطاء حديث؟

تم النشر بتاريخ 2024-11-16
تصفح:419

 Why is `size_t` Unsigned in C/C  : A Historical Necessity or a Modern Bug Magnet?

لماذا size_t غير موقع؟

ملاحظة Bjarne Stroustrup بأن "استخدام unsigned بدلاً من int للحصول على بت واحد إضافي لتمثيل الأعداد الصحيحة الموجبة لا يعد فكرة جيدة على الإطلاق" أثار مخاوف بشأن قرار جعل size_t غير موقع.

تاريخي الأصول

في الأصل، تم إنشاء size_t بدون إشارة لاستيعاب البنيات ذات المؤشرات 16 بت، مثل أنظمة DOS. لمنع قيود حجم السلسلة، فرض معيار C ptrdiff_t، النظير الموقع لـ size_t، ليكون فعالاً 17 بت.

الصلة الحالية

في حين أن هذه الأسباب التاريخية قد لا تزال قابلة للتطبيق في الأنظمة المدمجة، فهي أقل أهمية بالنسبة للبرمجة الحديثة 32 بت و64 بت. في هذه البيئات، لا توجد مزايا عملية لاستخدام الأنواع غير الموقعة للأرقام، ويمكن أن يؤدي استخدامها إلى أخطاء محتملة بسبب قواعد التحويل الضمنية C/C (على سبيل المثال، حيث string("Hi").length()

الخلاصة

لم يكن القرار بجعل size_t غير موقع خطأ، بل كان اختيارًا عمليًا للأنظمة المحدودة في عصره. ومع ذلك، في ممارسات البرمجة الحديثة، يُنصح عمومًا بتقليل استخدام الأعداد الصحيحة غير الموقعة في الواجهات والأرقام، باستثناء ظروف محددة حيث تكون الطبيعة الوصفية الذاتية لـ typedef int MyType مفيدة.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3