2015-10-15 80 views
1

假設我有一個頭文件,它應該包含另一個頭文件但不包含(無論什麼原因)。例如:確定是否所有需要的頭文件都包含在另一個頭文件中

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文件,並且只包含頭文件(但不能擴展到大量頭文件)。有沒有一些靜態分析工具或方法可以幫我檢查?

+0

技術上,你不應該依賴其他文件來包含你需要的東西。如果你可以避免這樣做,你不會問這個問題 – smac89

+0

我有時使用一種技術,其中每個頭都包含在它自己的小cpp文件中,沒有其他代碼(或只是對頭功能的一些測試)。這往往會發現缺少的依賴關係。這很容易做到。 –

+0

@ Smac89我不依賴它。很多時候我只是忘記包含頭文件。我只習慣使用常量/函數/類型/等。並且還記得有足夠的其他文件可以忽略一個缺失的實例。 –

回答

0

你可以手動完成。

這是一種愚蠢的坐在通過,並編寫代碼來檢查你和它粘貼在每一個文件時,你可以花100的那段時間正好在前往頂部和粘貼包含語句。

+0

理想情況下,假設你記得要做到這一點。我知道我養成了使用uint32_t的習慣,有時把它當作語言中的一個原語來對待。因此,我忘了我需要包括。但是我已經在足夠的其他地方完成了它的隱藏。另外,如果你在一個糟糕的設計/書寫的遺留代碼庫中工作,像我在工作時那樣,頭文件組織起來很滑,你可以偶爾得到一個常量或其他「免費」的東西,而不包含必要的頭文件,因爲別的東西正在掩蓋它。 –

相關問題