似乎我經常發現我的代碼從一個linux安裝移動到另一個或從一個unix移動到另一個時,我發現我錯過了包含某些頭文件。C++中頭文件包含的靜態分析
當你將源代碼給其他人期望他們能夠編譯它就好,只是因爲缺少頭文件而失敗時,這往往會變得煩人。
是否有任何靜態分析工具可以檢測應明確包含在當前似乎隱含包含的標頭中?有什麼方法可以禁止這種隱式包含頭文件?
此外,我想檢測包含的頭文件,並可能通過代碼更改變得冗餘,不再需要。
似乎我經常發現我的代碼從一個linux安裝移動到另一個或從一個unix移動到另一個時,我發現我錯過了包含某些頭文件。C++中頭文件包含的靜態分析
當你將源代碼給其他人期望他們能夠編譯它就好,只是因爲缺少頭文件而失敗時,這往往會變得煩人。
是否有任何靜態分析工具可以檢測應明確包含在當前似乎隱含包含的標頭中?有什麼方法可以禁止這種隱式包含頭文件?
此外,我想檢測包含的頭文件,並可能通過代碼更改變得冗餘,不再需要。
我用checkheaders取得了一些成功。發展似乎在去年減緩了一些,但它仍然可用。可能最好使用trunk
版本。
有一個名爲Include-What-You-Use的谷歌項目可能會有幫助。但是要把它做好是很複雜的。我不知道有任何其他工具可以做到這一點。
這是否甚至比clang-2.9更新?在那個版本之後,我一直認爲他們有點丟球。 –
我知道沒有這樣的工具,但您可以使用[autoconf](http://www.gnu.org/software/autoconf/)之類的東西來幫助您檢測應用程序在系統上可用的頭文件正在建設中。然後,您可以在一個系統上收到關於缺少頭文件的「錯誤」,並且您只需在配置腳本中添加一個針對該頭文件的檢查,並在源文件中添加一個條件包含文件,它將在需要該特定頭文件的所有平臺上文件。 –
此外,對於POSIX功能,您可以查看[官方參考](http://pubs.opengroup.org/onlinepubs/007904975/)中特定功能所需的頭文件。 –
您能否澄清一下您在「含蓄」中的含義?計劃如何處理#ifdefs下的#includes?你是否想要所有可能的條件編譯密鑰組合的包含文件的完整列表?作爲類似分析的示例,您可以查看構建項目中使用的所有條件編譯鍵的列表:http://cdsan/Samp_CondParams.php –