2012-04-04 68 views
0

我有了定義,因爲這幾個選項庫:有沒有辦法替換已經定義好的預處理器標識符?

#define shouldShowToolbar YES 
#define shouldAlignToLeft YES 
etc.. 

,我正在尋找一種方式來真正取代那些從外部(無需修改庫,因爲未來的更新將打破它)。是否有可能,或者我注意到每次更新出現時都要更改庫源代碼(我確實有)。

回答

3

#undef

#include "library_header.h" /* Which defines the macro. */ 

#undef shouldShowToolbar  /* You undef it. */ 
#define shouldShowToolbar NO /* If you want, you can redefine it. */ 

http://gcc.gnu.org/onlinedocs/cpp/Undefining-and-Redefining-Macros.html

+0

+1這個建議,因爲我認爲這是一個更好的方法,而不是重新定義在第一個文件之後處理的文件中的值。 undef/define pairing允許其他人閱讀你的代碼,看看你是否打算重新定義,而不是錯誤地做。 – jmstone617 2012-04-04 14:25:56

0

據我所知,預處理指令編譯之前執行。所以在那之後,沒有機會改變一些東西。

1

如果您不希望某個特定的宏生效的一段代碼,你知道,宏的名稱也一樣,你可以使用

#undef shouldShowToolbar 

/* Your code */ 

#define shouldShowToolbar 

這不會完全民主基金的宏,因爲你永遠不知道哪部分代碼實際上可能需要它

1

這些是在編譯時硬編碼的值。如果你用你的項目編譯這個庫,那麼你應該能夠將它們重新定義在稍後在編譯列表中編譯的文件中,我認爲它有一個特殊的關鍵字。否則就好像說我想在庫中替換YES。

相關問題