ฉันลองใช้ Flexelint (PC-Lint เวอร์ชั่น unix) และได้ผลลัพธ์ที่ค่อนข้างหลากหลาย อาจเป็นเพราะฉันกำลังทำงานบนฐานรหัสที่มีขนาดใหญ่และมีปมมาก ฉันขอแนะนำให้ตรวจสอบแต่ละไฟล์ที่รายงานว่าไม่ได้ใช้อย่างระมัดระวัง
ความกังวลหลักคือผลบวกผิด ๆ การรวมหลายส่วนของส่วนหัวเดียวกันถูกรายงานว่าเป็นส่วนหัวที่ไม่จำเป็น สิ่งนี้ไม่ดีเนื่องจาก Flexelint ไม่ได้บอกคุณว่าส่วนหัวของบรรทัดนั้นรวมอยู่ที่ใดหรือรวมอยู่ที่ไหนก่อน
หนึ่งในวิธีที่เครื่องมืออัตโนมัติอาจผิด:
ใน A.hpp:
class A {
// ...
};
ใน B.hpp:
#include "A.hpp
class B {
public:
A foo;
};
ใน C.cpp:
#include "C.hpp"
#include "B.hpp" // <-- Unneeded, but lint reports it as needed
#include "A.hpp" // <-- Needed, but lint reports it as unneeded
หากคุณติดตามข้อความจาก Flexelint อย่างสุ่มตัวอย่างคุณจะทำลาย #include การพึ่งพาของคุณ มีกรณีทางพยาธิวิทยามากขึ้น แต่โดยทั่วไปคุณจะต้องตรวจสอบส่วนหัวของคุณเองเพื่อผลลัพธ์ที่ดีที่สุด
ฉันขอแนะนำบทความเกี่ยวกับโครงสร้างทางกายภาพและ C ++จากบล็อกเกมจากภายใน พวกเขาแนะนำวิธีการที่ครอบคลุมในการทำความสะอาด #include:
แนวทาง
นี่คือชุดแนวทางที่กลั่นจากหนังสือของ Lakos ที่ลดจำนวนการพึ่งพาทางกายภาพระหว่างไฟล์ต่างๆ ฉันใช้มันมาหลายปีแล้วและฉันก็มีความสุขกับผลลัพธ์ที่ได้เสมอ
- ไฟล์ cpp ทุกไฟล์จะมีไฟล์ส่วนหัวของตัวเองก่อน [snip]
- ไฟล์ส่วนหัวจะต้องมีไฟล์ส่วนหัวทั้งหมดที่จำเป็นในการแยกมัน [snip]
- ไฟล์ส่วนหัวควรมีจำนวนไฟล์ขั้นต่ำเปล่าที่จำเป็นในการแยกวิเคราะห์ [snip]