يحتوي Eclipse على مفهرين C / C ++ (سريع وقلوع): ما الفرق؟

StackOverflow https://stackoverflow.com/questions/763837

سؤال

يوفر Eclipse CDT مفهرسيين لرمز C / C ++ (تفضيلات> C / C ++> المفهرس). هل يعرف أي شخص ما الفرق الدقيق بين هذين؟

ملف المساعدة ليس بالضبط:

"تدعم CDT مساهمة مفهرسي إضافيين، مع توفر 2 مفهرسا مع إصدار CDT الافتراضي:

  • Fast C / C ++ Indexer: يوفر أسرع قدرات الفهرسة - كل من التصريح ومعلومات مرجعية عبرها. هذا هو المفهرس الموصى به.

  • يوفر الفهرس C / C ++ Full: إمكانيات فهرسة أكثر دقة بتكلفة الأداء - كلتا التصريح ومعلومات مرجعية. "

ماذا يعني أن تكون أكثر دقيق: هل يفكر المزيد من الأشياء، وإذا كان الأمر كذلك أي منها؟

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

المحلول

فيما يلي مقتطف من صفحة CDT التي تصف تحليلها وفهرسةها (CDT / تصاميم / نظرة عامة على تحليل). إنه يعطي وصفا جيدا جدا لما هي الاختلافات وأين يمكن أن يفشل المفهرس السريع:

تعد دقة التحليل والملزمة عملية بطيئة، هذه مشكلة لأن المستخدم يتوقع أن يحصل المستخدم على ميزات تحرير التعليمات البرمجية مثل المحتوى بسرعة. لهذا السبب تخزن CDT معلومات ملزمة في ذاكرة التخزين المؤقت على القرص المسمى "الفهرس" أو "PDDOM" (نموذج كائن المستندات المستمر) من أجل أن تكون قادرا على توفير ميزات تستجيب بسرعة طلبات المستخدم.

ينطوي بناء الفهرس على تحليل جميع التعليمات البرمجية في مشروع، وحل جميع الروابط وكتابة تلك الارتباطات إلى الفهرس. ثم يتم تحديث الفهرس تدريجيا في كل مرة يقوم المستخدم بتعديل ملف.

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

عندما يتم تضمين ملف رأس في ملف مصدر، يخضع لأي وحدات ماكرو تم تعريفها عند هذه النقطة. تستخدم بعض رؤوس المكتبات من وحدات الماكرو جنبا إلى جنب مع شرياحيات مسبقا (#IFDEFS) لإدراج ملف الرأس جزئيا. في بعض الأحيان يتم تضمين ملف الرأس هذا أكثر من مرة واحدة في مشروع، إذا كانت وحدات الماكرو التي يعتمدها الرأس تعتمد عليها مختلفة في كل مرة يتم فيها تضمين الرأس ثم أجزاء مختلفة من الرأس قد يتم تضمينها في ملفات مصدر مختلفة. لن يكون أي مفهرسا دقيقا في هذا السيناريو لأنه سيؤدي إلى فهرسة الرأس فقط في المرة الأولى التي تصادفها.

سيؤدي المفهرس الكامل إلى إعادة تحليل الرؤوس التي واجهتها بالفعل، لكنها لن تقوم بإعادة فهرستها. لذلك قد يتم تحليل الملفات المصدر التي تتضمن رأس رأس أكثر دقة، ولكن سيتم فهرسة الرأس نفسه مرة واحدة فقط. الفهرس الكامل أبطأ بكثير من المفهرس السريع بسبب تحليل الإضافي الذي يفعله، ولكنه أكثر دقة أكثر واقعية فقط. لهذا السبب لا ينصح بمفهرس كامل وقد تمت إزالته من الإصدار الحالي من CDT.

كل مشروع لديه بند واحد مرتبط به. يتم تخزين PDDN على القرص كملف ثنائي مسطح. سيقوم المفهرس بفهرس الرؤوس التي يتم تضمينها بواسطة الملفات المصدر، لذلك إذا كان هناك ملف .h في المشروع الذي لا يتم تضمينه بواسطة أي ملف .c أو .cpp، ثم عادة لن يتم فهرسة. ومع ذلك، هناك إعداد تفضيل لفهرسة جميع الملفات في المشروع.

نصائح أخرى

أعتقد أنه دائما إعادة صياغة أي ملفات مضمنة / مضمنة دون "التخزين المؤقت". السبب إذا كان قد يعتمد محتويات الملفات على تعريفات ما قبل المسامير، فهذا هو دائما إعادة صياغة. يفترض المحلل بسرعة لا شيء قد تغير منذ أن تمت مصادفة الملف لأول مرة.

(ولكنني يمكن أن تكون خاطئة)

هل يعرف أي شخص ما الفرق الدقيق بين هذين؟

في تجربتي، حوالي 32 ميغابايت كومة.

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