2011-08-18 223 views
1

我遇到了這個問題。這不是關於宏功能,只是簡單的字符串值宏替換。宏定義衝突

我有兩個頭文件

test1.h 
#define TEST 123 
test2.h 
#define TEST 456 

現在我有一個程序既包括這兩個頭,但我希望我的實際測試爲123 如何避免定義測試爲456?你可能會認爲我瘋了,而不是簡單地改變宏,但情況是:我有一個第三方解碼器,它有這個宏(在test1.h中定義),還有另一個WINAPI宏(已定義在test2.h中)。這兩個文件都由其他人控制;我不應該改變他們中的任何一個。 我根本不需要test2.h,但我想它隱含地包含在其他一些WINAPI頭文件中。

那麼,有誰能請告訴我如何解決這個問題?用我的第三方宏覆蓋WINAPI宏?或者如何在我自己的代碼中取消WINAPI頭文件中的定義?有沒有辦法指定我不想包含哪個頭。

+0

你可以重新定義它在你的代碼中,包括之後。這將再次重新定義它,以便它在任何需要它的地方都有正確的值。 – Patrick87

回答

3

您可以使用#ifdef預處理器指令來確定TEST是否已爲您的特定情況定義。或者只是#undef它第一。

#undef TEST 
#define TEST 123 

您想TEST是123而不是456。此外,這必須test1.h之前把在你的頭文件。

+0

並且首先包含test1.h – atoMerz

+0

否:'#undef TEST'和'#define TEST 123'就足夠了。 –

+0

它的工作原理!謝謝!我不知道有一個#undef,現在我明白了。 – joeyzhao

1
#ifdef TEST 
#undef TEST 
#define TEST 123 
#endif 
+0

否:'#undef TEST'和'#define TEST 123'就足夠了。 –

2

#undef TEST後,包括test2.h和之前包括test1.h。這是一個黑客,因爲你無法修復宏名稱。

2

可以取消定義它,如果你既包括標頭文件爲:

//yourfile.cpp 

#include "test2.h" //include this before test1.h 

#undef TEST //this undefines the macro defined in test2.h 

#include "test1.h" //now this defines a macro called TEST which you need 
1

試試這個:

#include "test2.h" 
#undef TEST 
#include "test1.h" 

這首先包括test2的,放棄其TEST,然後包括test1的。