假設我有一個頭文件,它應該包含另一個頭文件但不包含(無論什麼原因)。例如:確定是否所有需要的頭文件都包含在另一個頭文件中
myHeader.h
#ifndef MYHEADER_H
#define MYHEADER_H
struct i
{
uint32_t field; // Forgot to include <cstdint>
};
#endif
這個錯誤可以很容易地隱藏在.C/.cpp文件。比如像這樣:
someFile.cpp
#include "myOtherHeader.h" // <cstdint> gets included through this file
#include "myHeader.h"
struct i someStruct;
someFile.cpp會編得很好,隱藏,我錯過了包括myHeader.h cstdint
的事實。這在這裏不是問題,但假設當我想在其他.cpp文件中使用myHeader.h時,可能會導致問題。
有沒有簡單的方法來檢測這個頭文件的遺漏?有不愉快的方式,比如手動查看文件(但是這很乏味和容易出錯),或者創建一個虛擬的.cpp文件,並且只包含頭文件(但不能擴展到大量頭文件)。有沒有一些靜態分析工具或方法可以幫我檢查?
技術上,你不應該依賴其他文件來包含你需要的東西。如果你可以避免這樣做,你不會問這個問題 – smac89
我有時使用一種技術,其中每個頭都包含在它自己的小cpp文件中,沒有其他代碼(或只是對頭功能的一些測試)。這往往會發現缺少的依賴關係。這很容易做到。 –
@ Smac89我不依賴它。很多時候我只是忘記包含頭文件。我只習慣使用常量/函數/類型/等。並且還記得有足夠的其他文件可以忽略一個缺失的實例。 –