سؤال

لقد حاولت البحث في الوثائق والإنترنت بأفضل ما أستطيع، لكنني لم أتمكن من جعل مترجم Xcode يصدر تحذيرًا إذا تم استخدام عامل التعيين في عبارة if.

أنا قادم من RealBasic، حيث لدي عادة قوية للغاية تتمثل في كتابة هذا النوع من المقارنة:

if x = 5 then ...

في لغة C، بطبيعة الحال، يعين بناء الجملة x قيمة 5 ثم يختبر النتيجة لمعرفة ما إذا كانت غير صفرية، والمشغل "الصحيح" هو:

if (x == 5) { ... }

لقد وجدت العديد من الإشارات إلى أن المترجم يجب أن يكون قادرًا على التحذير إذا كان هناك مهمة تم إجراؤها في مقارنة if، لكن لا يمكنني العثور على كيفية تشغيلها في Xcode 3.1/gcc.لقد وجدت -pedantic الخيار، ولكن لا يبدو أن هذا يؤدي إلى إنشاء التحذير.

نظرًا لأنني أمضيت قدرًا لا بأس به من الوقت مرتين الآن في تعقب الأخطاء التي تبين أنها "=" بدلاً من "=="، فأنا أرغب في الحصول على مساعدة من خلال تحذير.

أعلم أنه يمكنني القيام بذلك بدلاً من ذلك (مما سيؤدي إلى حدوث خطأ في المترجم):

if (5 = x) { ... }

...ولكن هذا يتطلب تغيير عادات البرمجة الراسخة أيضًا.ناهيك عن أنها تبدو خرقاء ومتخلفة.

شكرًا!

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

المحلول 2

الرابط الموجود في إجابة ennukiller أدى إلى ما أحتاجه.

إليك المزيد من المعلومات لأي شخص قد يجد هذا في المستقبل:

  • تحذير المترجم هو "الأقواس والأقواس مفقودة" أو -Wparentheses.

  • يتم تشغيل التحذير عن طريق اختيار الحصول على معلومات للهدف الحالي في XCode.

  • كما اكتشفت أخيرًا، فإن iPhone Simulator SDK يفعل ذلك لا إظهار خيار المترجم هذا.

  • سيعرض تبديل جهاز SDK إلى جهاز iPhone قسم تحذيرات GCC 4.2 ، والذي يتضمن "الأقواس والأقواس المفقودة".

  • بعد تشغيل هذا الخيار في جهاز iPhone Device SDK ، يوضح العودة إلى محاكاة محاكاة أنه تمت إضافة إعداد بناء "محدد من قبل المستخدم":GCC_WARN_MISSING_PARENTHESES = "نعم".

  • إذا كانت المهمة مطلوبة حقًا في بيان if ، فيمكنك مضاعفة الأقواس لتجنب التحذير.

(مثال بين قوسين :)

if ((x = 5)) { ... }

يعمل التحذير مثل السحر، على الرغم من أنه لا يتوافق مع معيار Apple:

if (self = [super init]) { ... }

ربما سأتركها كما هي، على الرغم من أنه إذا انتهى بي الأمر بكمية كبيرة منها في المشروع، فإما أن أضاعف الأقواس أو أقسم المهمة إلى سطر منفصل.

شكرًا!

نصائح أخرى

أنت تبحث عن خيار الجدار شاحن أعتقد.

int main(void) {

    int x = 5;
    if ( x=5) { 
    }
    return 0;
  }

$ g++ -pedantic x.cc 
$ g++ -Wall x.cc 
x.cc: In function ‘int main()’:
x.cc:7: warning: suggest parentheses around assignment used as truth value
يصف

كيفية تمكين الخيارات من خلال واجهة المستخدم الرسومية كسكودي

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