2012-04-04 70 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。

相关问题