2013-04-12 181 views
2

我有一個包含預編譯的頭重,包括文件和智能感知包括各種第三方庫,如:預編譯頭,

#ifndef PRECOMPILED_H 
#define PRECOMPILED_H 

#include "booststuff.h" 
#include "luastuff.h" 

#endif 

booststuff.hluastuff.h是頭文件在我的項目中,只包括各種boost/lua相關的東西,並設置了一些typedefs/usings /命名空間別名。

我在visual studio(2012)中以通常的方式設置了預編譯頭文件,並使用force include選項將其包含在每個cpp文件中。

在cpp文件中,我也非常小心#include「booststuff.h」,我真正使用它(我有時會禁用預編譯頭文件來測試它)。不過,最近我一直在想這是不是一個好主意。所以:

  • 請問什麼壞事發生,如果我再有一個已經包含在預編譯的頭(文件我不明白爲什麼它會,但我已經看到關於有在被列入」報頭的東西相同的順序「,並沒有真正理解他們在做什麼)?

  • 它是否會影響智能感知(在一個相當小的項目中,速度太慢)?我很樂意放棄一些更好的Intellisense的可移植性,因爲我目前不想轉換平臺。

+0

*「有什麼不好發生......」*如果這些標題寫得正確,它是安全的。 –

回答

2

如果每個包括文件中有#pragma once,編譯器將完全跳過讀取在第二和隨後的嘗試的文件以包括它。它沒有明確說明,但我假定預編譯頭也跟蹤這些信息。

+0

我可以通過經驗確認預編譯頭確實跟蹤了這些信息,因此如果稍後重新包含,相同的頭文件將被忽略。 –

+0

我正在使用標頭警衛而不是編譯指示。這同樣適用於Intellisense編譯器嗎? – user673679

+1

@ user673679,Intellisense將不得不分析足夠的文件以認識到它不會被使用,因爲包含警衛。這聽起來並不快。 –