سؤال

لماذا الفرق بين اثنين time_tق عاد من قبل difftime( time_t t1, time_t t2) الطريقة باعتبارها double?لا أرى من أين تأتي متطلبات الدقة.

هل كانت مفيدة؟

المحلول

لأن time_t يتم تعريفه ببساطة في المعيار على أنه arithmetic type capable of representing times.

هذا عن كل ما يقوله عن ذلك.لا يجب أن يكون عددا صحيحا ، ولا يجب أن يمثل الثواني.يمكن أن يكون مضاعفا لعشرة فقط أو قد يكون نوع النقطة العائمة قادرا على تمثيل الأوقات وصولا إلى دقة 10-43 ثواني.

الاقتباس من C99 7.23.1 Components of time هو (معاد صياغته قليلا):

الأنواع المعلنة هي clock_t و time_t, ، وهي أنواع حسابية قادرة على تمثيل الأوقات.يتم تحديد نطاق ودقة الأوقات التي يمكن تمثيلها في الساعة والوقت.

ومن ثم فإن الأشخاص الذين يعملون بشكل أعمى على فارق التوقيت مع:

delta = time_end - time_begin;

قد تجد أن التعليمات البرمجية الخاصة بهم لا تعمل على جميع المنصات.

الآن أنا لا أعرف من أعلى رأسي أي منصات حيث انها ليست ثوان بسيطة منذ عصر ولكن لقد تعرضت للعض من الافتراضات مثل هذا من قبل ، مثل افتراض A من خلال Z هي متجاورة في حين ، في الواقع ، هذا غير مطلوب ولا يعمل بشكل جيد على منتجات المركزية التي تستخدم إبكديك.و ، نعم ، انهم لا يزال في ثقيل استخدام على الرغم من ما يبدو أنه كان يموت منذ ' 60: -)

وثيقة المنطق سي 99 لديها هذا القول:

الأنواع clock_t و time_t هي حسابية لأن قيم هذه الأنواع يجب ، وفقا للممارسة الحالية ، في بعض الأحيان أن تقارن مع -1 (إشارة "لا أعرف") ، يلقي بشكل مناسب.

لا يتم تحديد الخصائص الحسابية لهذه الأنواع بواسطة المعيار ، ومع ذلك ، من أجل السماح للتطبيقات بأقصى قدر من المرونة في اختيار النطاقات والتوضيحات والتمثيلات الأكثر ملاءمة للتطبيق المقصود.لا يلزم أن يكون التمثيل عددا من الوحدات الأساسية;قد يمثل التنفيذ مكونات مختلفة لقيمة زمنية كحقول فرعية من نوع عدد صحيح.

نصائح أخرى

على الرغم من التفكير عالميا-وتنفيذها-كنوع متكامل يمثل ثوان منذ بداية بعض الحقبة, time_t لم يتم تعريفه رسميا على هذا النحو ، لذلك لا يمكنك استخدام نتيجة ديفتايم إذا كان time_t.أما بالنسبة للبدائل الأخرى: int صغير جدا في بعض الظروف (كما هو long) و long long ليست محمولة.

ربما لأنه النوع الحسابي الأكثر عمومية.ويسمح أفضل من الدقة الثانية إذا كان الكامنة time_t يدعم ذلك.

والسبب في ذلك هو أنه لا توجد عمليات حسابية محددة للنوع time_t, ، من خلال إرجاع مزدوج ، فهذا يعني أنه يمكنك استخدام النتيجة في العمليات الحسابية.

إذا قمت بإضافة اثنين time_t القيم مع بعضها البعض أنت في منطقة غير آمنة نظرا لأن السلوك المختلف قد ينتج إذا تم تعريف الوقت على أنه كثافة عمليات غير موقعة أو كثافة عمليات عادية - اعتمادا على النظام الأساسي الخاص بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top