2

我有一個項目由幾個源模塊和頭文件組成。其中兩個(s1.c,s2.c#include相同的頭文件(s3.h)。這個頭文件包含條件編譯構造,基於外部定義的宏:現在如何根據不同的源模塊上下文突出顯示常見的頭文件?

#ifdef ExtMacro 
#define IntMacro 1 
#else 
#define IntMacro 2 
#endif 

ExtMacros1.c#include "s3.h"定義,但在s2.c定義

在Eclipse編輯器中打開頭文件時,會解析代碼以查看語法突出顯示,並且從構建中排除的部分在灰色背景中突出顯示。

正如你所看到的,s3.h排除部分取決於其包容的背景下。但是Eclipse選擇其中一個包含模塊來突出顯示標題代碼。

有沒有辦法告訴Eclipse在一個上下文中突出顯示標題代碼?

+1

這是一個索引器相關的問題。嘗試搞亂它的* Project Properties-> C/C++ General-> Indexer *中的設置。但我不會樂觀的。 –

回答

0

可以在路徑&符號設置ExtMacro爲符號。然後你創建兩個構建配置,一個是ExtMacro定義的地方,另一個不是。然後,當配置更改時,您將索引器設置爲重新索引。隨着配置的切換,索引器將顯示正確的上下文。

然後,您可能需要從索引器中排除s1.c中的固定定義。在Eclipse CDT解析器生成預處理器符號,你可以觸發和使用:

#ifdef __CDT_PARSER__ 
#else 
#define ExtMacro 
#endif 

這樣的符號ExtMacro隱藏的CDT解析器,但不是你真正的編譯器,它只有拿起從構建配置符號。

+0

謝謝。有趣的想法,但實際的文件是由一個程序員團隊開發的項目的生產代碼(我是唯一使用Eclipse進行開發的項目)。我不擁有該模塊,並且不想執行代碼更改。 – ysap

+0

@ysap您不必提交更改,如果您只想正確查看'.h'文件,它可能不會排除。 –

+0

但是,當你拉動變化時,你將不得不重複這個過程,不是嗎?(或者經歷一些繁瑣的合併過程)。 – ysap

1

如果您在Preferences -> C/C++ -> Indexer -> "Index all variants of specific headers"頭添加到列表中,然後將CDT指數報頭的兩個版本。

然後,當您按照#包括s1.c中的#include打開標頭時,它會顯示在s1.c的上下文中索引的版本。當您按照s2.c中的#include打開它時,它會顯示在s2.c的上下文中索引的版本。

我不知道的方式來控制哪個版本,當你打開沒有上下文(例如,通過項目資源管理器)的標題所示。

(而不是添加標題到"Index all variants of specific headers"列表,你也可以只檢查"Index all header variants",但我不建議這樣做,因爲它很可能有索引項目的業績產生不利影響。)

+0

謝謝。這聽起來像是問題的解決方案,儘管問了近兩年後,我實在不記得這個問題的背景8)。我將嘗試在我們的工作空間中生成一個測試用例來批准答案。 – ysap

相關問題