سؤال

أرى الكثير من التعليمات البرمجية بما في ذلك stdafx.h.قل سأفعل لا تريد الرؤوس المترجمة مسبقًا.و انا سوف قم بتضمين كافة رؤوس النظام المطلوبة بنفسي يدويًا.في هذه الحالة، هل هناك أي سبب وجيه آخر يجب أن أكون على دراية بالمكان الذي أحتاج إليه stdafx.h?

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

المحلول

إذا كنت لا تريد استخدام الرؤوس المترجمة مسبقًا، فلا فائدة من استخدام ملف التضمين القياسي - سيؤدي ذلك إلى إبطاء إنشاء كل ملف يتضمنه وسيؤدي إلى تضمين أشياء إضافية لا يحتاجون إليها.تخلص منه وقم فقط بتضمين الرؤوس التي يحتاجونها.

نصائح أخرى

حتى بدون الرؤوس المجمعة مسبقًا، يمكن أن يكون stdafx.h مفيدًا لأنه يجمع الرؤوس والتعريفات المشتركة لجميع الملفات.

يمكنك بالطبع اختيار تكرار كل هذه التعريفات في كل ملف.stdafx.h ليس ضروريًا تمامًا.

stdafx.h هو مجرد ملف رأس آخر.إذا سقطت فلا داعي لذلك، فلا تتردد في عدم تضمينه وإزالته من المشروع.

ومع ذلك، فمن المعتاد أن يكون لديك ملف مثل stdafx.h بالضبط لكي تعمل الرؤوس المترجمة مسبقًا ولا تتضمن جميع العناصر يدويًا في كل ملف مصدر.

يمكنك استخدام الرؤوس المجمعة مسبقًا (وهو أمر جيد) دون استخدام stdafx.h (أنا أكرهها أيضًا).لا يمكنني سوى الوصول إلى VC++ 6.0 ولكن في ذلك انتقل إلى إعدادات المشروع|C/C++|الرؤوس المترجمة مسبقًا وحدد "الاستخدام التلقائي للرأس المترجم مسبقًا" ولكن اترك مربع "المترجم من خلال" فارغًا.

كما ذكر آخرون:إذا لم تكن بحاجة إلى رؤوس مجمعة مسبقًا، فلن تحتاج حقًا إلى stdafx.h .واستخدامه فقط لتجميع التضمينات المشتركة يعد ممارسة سيئة للغاية، في الواقع.

في الواقع، حتى عند استخدام الرؤوس المترجمة مسبقًا، من الممارسات الجيدة تضمين الرؤوس التي تحتاجها عمليتك فعليًا بعد stdafx.h (أو precompiled.h أو أي شيء تريد تسميته) - إلى جانب سحر #ifdef في رأسك المترجم مسبقًا لإيقاف تشغيله استخدام PCH.

لماذا؟من أجل التحقق من تبعيات الوحدة الخاصة بك.تتيح لك القدرة على تعطيل PCH معرفة ما إذا كنت تقوم بتضمين الوحدات الضرورية أم لا، ويمكنك بعد ذلك كتابة أداة للتحقق من الترابط بين الوحدة الخاصة بك عن طريق تحليل ملفات .cpp و.h (باستثناء رأس PCH بالطبع).

أعلم أن هذا موضوع قديم، لكنني أعتقد أنني سأنقل رأيي إلى القراء.لقد وجدت هذا في عام 2017، لذلك أنا متأكد من أنني لست الوحيد الذي سيكون هنا.

هناك ميزة لاستخدام الرؤوس المجمعة مسبقًا، والتي قد يتجاهلها الآخرون لأنهم يستخدمون ممارساتهم لسنوات عديدة.لقد تطور معيار C++ بشكل كبير.بدلاً من تضمين المتجهات في 20 ملفًا قد تحتاجها أو أي شيء آخر، يمكنك استخدام ملف PCH ويجب على المترجم القيام بعمل أقل، وهذا يجعل الوجوه سعيدة للجميع.كما يمكنك وضع وحدات الماكرو الشائعة الخاصة بك هناك، مثل التحقق والتأكيد وكائنات الفئة الذكية.لا تضع رؤوس الفصل الخاص بك هناك، فلن يكون ذلك منطقيًا لذلك، بل المكتبة القياسية أو أي شيء ستحتاج إلى استخدامه عالميًا في الكثير من الأماكن مثل وحدات الماكرو التي ذكرتها.

أدرك ذلك بشكل أساسي، من خلال تضمين الرؤوس التي تحتاجها في كل ملف تحتاجه، مثل iostream، والسلسلة، والمتجهات، فإنك تقوم بتجميع ذلك بشكل فعال في كل مرة كمضمنة في الملف.قم بتضمين رأس "مجمع مسبقًا"، حسنًا، يجب أن يقرع الاسم فقط الجرس هناك.

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