سؤال

عندما أستخدم هذا

#include<time.h>
//...
int n = time(0);
//...

أحصل على تحذير حول تحويل الوقت إلى int. هل هناك طريقة لإزالة هذا التحذير؟

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

المحلول

إرجاع الوقت time_t وليس عدد صحيح. استخدام هذا النوع يفضل لأنه قد يكون أكبر من int.

إذا كنت حقا بحاجة int, ، ثم typecast انها صراحة، على سبيل المثال:

int n = (int)time(0);

نصائح أخرى

نعم، تغيير n ليكون time_t. وبعد إذا نظرت إلى التوقيع في الوقت المناسب. في معظم / جميع الأنظمة، سترى أن هذا ما يعوده.

#include<time.h>
//...
time_t n = time(0);
//...

لاحظ أن أراك صحيح: استخدام INT 32 بت مشكلة، بحد أدنى، بسبب علة 2038. وبعد ومع ذلك، يجب أن تنظر في أن أي نوع من الحساب على عدد صحيح n (بدلا من time_t) يزيد فقط من احتمال أن يربط الشفرة على هذا الخطأ في وقت مبكر.

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

أعتقد أنك تستخدم Visual C ++. نوع العودة من time(0) يكون 64bit int حتى لو كنت برمجة ل 32bit منصة على عكس g++. وبعد لإزالة التحذير، فقط تعيين time(0) ل 64bit عامل.

ربما تريد استخدام نوع من Time_t بدلا من int.

انظر المثال في http://en.wikipedia.org/wiki/time_t..

السبب هو الوقت الحالي () وظائف إرجاع وقت time_t لذلك قد تحتاج إلى القيام بدقة ثابتة إلى int أو uint في هذه الحالة. اكتب بهذه الطريقة:

time_t timer;
int n = static_cast<int> (time(&timer)); // this will give you current time as an integer and it is same as time(NULL)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top