سؤال

في C99، أقوم بتضمين Stdint.h وهذا يعطيني uint32_max وكذلك UINT32_T. ومع ذلك، في C ++ يتم تعريف UINT32_MAX. يمكنني تحديد __STDC_LIMIT_MACROS قبل بما في ذلك stdint.h، ولكن هذا لا يعمل إذا كان شخص ما يشمل رأسي بعد ذلك بما في ذلك Stdint.h أنفسهم.

لذلك في C ++، ما هي الطريقة القياسية لمعرفة القيمة القصوى الممثلة تمثيلية في UINT32_T؟

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

المحلول

حسنا، أنا لا أعرف uint32_t ولكن بالنسبة للأنواع الأساسية (bool, char, signed char, unsigned char, wchar_t, short, unsigned short, int, unsigned int, long, unsigned long, float, double and long double) يجب عليك استخدام numeric_limits قوالب عبر #include <limits>.

cout << "Minimum value for int: " << numeric_limits<int>::min() << endl;
cout << "Maximum value for int: " << numeric_limits<int>::max() << endl;

لو uint32_t هو #define من واحد من أعلاه من هذا الرمز يجب أن تعمل خارج الصندوق

    cout << "Maximum value for uint32_t: " << numeric_limits<uint32_t>::max() << endl;

نصائح أخرى

std::numeric_limits<T>::max() يحدد القيمة القصوى للنوع T.

حسنا، UINT32_T سيكون دائما 32 بت، وكن دائما غير موقعة، حتى تتمكن من تحديده بأمان يدويا:

#define UINT32_MAX  (0xffffffff)

يمكنك أيضا القيام به

#define UINT32_MAX  ((uint32_t)-1)

قد تكون قادرا على القضاء على #include ترتيب المشاكل عن طريق تغيير عملية البناء الخاصة بك لتحديد __STDC_LIMIT_MACROS رمز على سطر الأوامر مترجم بدلا من ذلك:

cxx -D__STDC_LIMIT_MACROS ...

بالطبع، لا يزال لديك مشكلة إذا كان رأس #undefS هذا الرمز.

أيضا، قد لا يكون مؤلفي تنفيذ المكتبة القياسية التي تستخدمها الذين تستخدمهم للمستخدمين لتعيين هذا الرمز الخاص؛ قد يكون هناك علم مترجم أو رمز مختلف يهدف المستخدمين إلى استخدام أنواع C99 في C ++.

لا أستطيع التعليق حتى هنا هو مدخلاتي في Glen VS LioR Kogan إجابة.

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

لذلك في هذه الحالة سوف يعمل فقط باستخدام إجابة LioR Kogan.

// This looks cleaner, less error prone and easier to read than the other suggested by Lior Kogan
#define UINT32_MAX  ((uint32_t)-1)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top