هل من الصواب تضمين كل ملفات الرأس؟

تذكر أسماء ملفات رأس النظام هو ألم ...

هل هناك طريقة لتضمين جميع ملفات العناوين الحالية دفعة واحدة؟

لماذا لا يقوم أحد بذلك؟

2
بالطبع "هناك طريقة". لكنها ليست فكرة جيدة. ربما يكون مبرمجو C الأكثر خبرة ببساطة يعرفون حيث يتم الإعلان عن تبعياتهم ولا تشمل سوى ما يحتاجون إليه بوعي كامل.
وأضاف المؤلف Kerrek SB, مصدر
إذا كانت هذه فكرة جيدة - فسيكون هناك ملف رأس واحد فقط للغة بأكملها
وأضاف المؤلف Adrian Cornish, مصدر
أعتقد أنها فكرة سيئة للغاية!
وأضاف المؤلف ldav1s, مصدر
AdrianCornish IIRC ، مسودة مكتبة قياسية في مرحلة ما قبل STL C ++ كانت تحتوي على ... رأس التي تضمنت جميع رؤوس C ++. ثم في نوبة عقلانية ، تخلصوا منه ... وبقية المسودة وبدأت مع المحكمة الخاصة بلبنان.
وأضاف المؤلف ldav1s, مصدر
السخرية لا تنتمي إلى إجابة. الإجابات هي فقط لهذا - الإجابات على الأسئلة.
وأضاف المؤلف Ken White, مصدر
@ نيت ، لم أقل أبدا أنه لا ينبغي أن يكون هناك دعابة أو سخرية في إجابة. قلت أن الفكاهة أو السخرية لا يجب أن تشكل الإجابة بدون أي محتوى آخر. لدي بالفعل ما يدعوه أصدقائي ومعارفي بروح مرحة جيدة (هكذا يقولون ، على أي حال). يجب أن تكون النكتة/السخرية مع أي شيء آخر كتعليقات ، وليس نشرها كإجابات على الأسئلة. هذا الموقع جيد جزئيا لأنه لا يوجد الكثير من الضوضاء والفوضى في الأسئلة والأجوبة. أنا أؤيد إبقائها على هذا النحو. :) أنا لم أسقط أي شخص ، إذا كنت ستلاحظ - أعطيت ldav1s الفرصة لحذف الإجابة بدلا من ذلك.
وأضاف المؤلف Ken White, مصدر
إذا كان مثل هذا الألم لتذكر ، يمكنك استخدام الكسوف وميزة "إضافة تشمل".
وأضاف المؤلف Nate, مصدر

6 إجابة

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

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

9
وأضاف

لا أحد يتضمن الكل ملفات الرأس. هناك عدد كبير جدًا ، وبعضها لا يتعارض مع الملفات الأخرى (مثل ncurses.h و curses.h).

انها حقا ليست بهذا السوء عند كتابة البرنامج حتى من الصفر. قليل من السهل تذكر: stdio.h لأي الأشياء FILE ؛ ctype.h لأي تصنيف للشخصية ، alloc.h لأي استخدام malloc() ، إلخ.

إذا كنت لا تتذكر واحدة:

  • اترك #include من
  • والترجمة </لى>
  • افحص رسائل الخطأ القليلة الأولى للإشارة إلى ملف رأس مفقود ، مثل بعض الأنواع غير معلنة ، أو استدعاء وظيفة باستخدام أنواع المعلمات المفترضة
  • حدد ما هي المكالمة الدالة التي هي السبب
  • انظر إلى صفحة الرجل (أو أي وثائق قام بها المحول البرمجي) لهذه الوظيفة
  • لاحظ #include الذي تعرضه المستندات وأضفه
  • التكرار حتى يتم إصلاح جميع الأخطاء

من السهل جدًا إضافتها إلى قاعدة الرموز الحالية. يمكنك الذهاب لمئات أو آلاف ساعات العمل ولا تضطر أبدًا إلى إضافة #include .

5
وأضاف

يتم معالجة ملفات التعليمات البرمجية المصدر مسبقًا قبل أن ينظر إليها المحول البرمجي ، وتعد عبارة #include أحد التوجيهات التي يستخدمها المعالج الأولي. عند إجراء المعالجة المسبقة ، يتم استبدال عبارات #include بالمحتويات الكاملة للملف التي يتم تضمينها. ستكون نتيجة تضمين كافة ملفات النظام ملفات مصدر كبيرة جداً يحتاج المحول البرمجي إلى العمل خلالها ، مما سيكلف الكثير من الوقت أثناء التحويل البرمجي.

5
وأضاف

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

1
وأضاف
Oli - ربما على حق مع C - كنت أفكر أكثر من C ++ التي يمكن أن تولد شحنة من رمز القالب الإضافي.
وأضاف المؤلف Adrian Cornish, مصدر
هذا لا ينبغي أن يكون له أي تأثير على حجم EXE.
وأضاف المؤلف Oliver Charlesworth, مصدر

أعرف ما تتحدث عنه ، لكني أحتاج إلى التحقق من النماذج الأولية للوظائف التي أستخدمها (للأجهزة التي لا أستخدمها يوميًا ، على أي حال) - سأقوم فقط بنسخ ولصقها > #includes مباشرة من الصفحة الرئيسية للوظائف المرتبطة بها. إنني أبحث بالفعل في صفحة manpage (إنه بسيط بسيط في vim (1) ) ، لذلك لا يبدو أنه عبء إضافي.

1
وأضاف

يمكنك إنشاء رأس "رئيسي" ، حيث تضع كل ما يتضمنه. ثم في كل شيء آخر تشمل ذلك! حذار من التعاريف المتعارضة والمراجع الدائرية ... حتى .... Master1.h ، master2.h ، ...

لا ندافع عنها. فقط أقول.

1
وأضاف