غريبة C++ الأخطاء البرمجية التي قد min()/ماكس() المكالمات
سؤال
أنا أرى أخطاء غريبة عندما بلدي C++ رمز مين() أو أقصى() المكالمات.أنا باستخدام Visual C++ compilers.
المحلول
تحقق إذا كانت التعليمات البرمجية الخاصة بك بما في ذلك يقوم نظام ويندوز.ح ملف الرأس و إما التعليمات البرمجية الخاصة بك أو غيرها من طرف ثالث رؤوس بهم مين()/ماكس() التعاريف.إذا كان الجواب نعم, ثم prepend الخاص بك يقوم نظام ويندوز.ح إدراج مع تعريف NOMINMAX مثل هذا:
#define NOMINMAX
#include <windows.h>
نصائح أخرى
احتمال آخر يمكن أن يكون من الآثار الجانبية.معظم مين/ماكس وحدات الماكرو سوف تشمل المعلمات عدة مرات و قد لا تفعل ما كنت تتوقع.الأخطاء والتحذيرات ويمكن أيضا أن تتولد.
max(a,i++) expands as ((a) > (i++) ? (a) : (i++))(في) في التوسع لتجنب المشاكل إذا كنت الاتصال مع الصيغ.محاولة توسيع max(a,b+c)بعد ذلك أنا هو إما زائد 1 أو + 2
منذ ويندوز يعرف هذا كما دالة على غرار الماكرو الحلول التالية متوفرة:
int i = std::min<int>(3,5);
يعمل هذا لأن الماكرو min()
يتم توسيع إلا عندما min
تليها (
, وليس عندما يتبعه <
.
آآخ...نطاق ذلك يا صاح: std::min()
, std::max()
.
أنا لم تستخدم في سنة ولكن من الذاكرة دفعة يعين min و max جدا, ربما ؟
بصراحة عندما يتعلق الأمر مين/ماكس, أجد أنه من الأفضل أن مجرد تعريف:
#define min(a,b) ((a) < (b) ? (a) : (b))
#define max(a,b) ((a) >= (b) ? (a) : (b))