سؤال
لاحظت أنه كان هناك في مرحلة ما <?
و >?
مشغل في مجلس التعاون الخليجي. كيف يمكنني استخدام هذه تحت GCC 4.5؟ هل تمت إزالتها ، وإذا كان الأمر كذلك ، متى؟
Offset block_count = (cpfs->geo.block_size - block_offset) <? count;
cpfs.c:473: error: expected expression before ‘?’ token
المحلول
أدلة حديثة قل:
الحد الأدنى والحد الأدنى للمشغلين G ++ ('
<?
' و '>?
') وأشكالها المركبة ('<?=
') و '>?=
') تم إهمالها وتم إزالتها الآن من G ++. يجب تعديل الكود باستخدام هؤلاء المشغلين للاستخدامstd::min
وstd::max
في حين أن.
يبدو أن البحث السريع عن المستندات السابقة يشير إلى أنه تمت إزالته حول الإصدار 4.0 (3.4.6 يشملها ، 4.0.4 لا).
نصائح أخرى
التكرارات في وقت سابق من g++
(ليس استخدم برنامج التحويل البرمجي C) هؤلاء المشغلين لمنحك الحد الأدنى أو الحد الأقصى للقيم ولكن تم إهمالهم منذ فترة طويلة لصالح std::min
و std::max
.
في الأساس ، كانت تساوي (ولكن بدون إمكانية تقييم مزدوج ل a
أو b
):
a <? b --> (a < b) ? a : b
a >? b --> (a > b) ? a : b
من حيث استبدالها (وأنت حقًا ينبغي استبدالها) ، يمكنك استخدام شيء مثل:
Offset block_count = cpfs->geo.block_size - block_offset;
if (block_count > count) block_count = count;
أو ما يعادلها باستخدام std::min
.
أنا لست معجبًا كبيرًا باستخدام "ملحقات" C/C ++ (خاصة تلك التي تم إهمالها و/أو إزالتها) لأنها تربطني بتنفيذ محدد للغة.
يجب ألا تستخدم أبدًا امتدادًا غير قياسي حيث تتوفر طريقة قياسية كافية تمامًا.