我有一个库,其中定义了几个选项:
#define shouldShowToolbar YES
#define shouldAlignToLeft YES
etc..
我正在寻找一种方法来实际替换外部的那些(不修改库,因为未来的更新会破坏它)。是否有可能,或者我注定每次更新时都要更改库源代码(我确实有)。
我有一个库,其中定义了几个选项:
#define shouldShowToolbar YES
#define shouldAlignToLeft YES
etc..
我正在寻找一种方法来实际替换外部的那些(不修改库,因为未来的更新会破坏它)。是否有可能,或者我注定每次更新时都要更改库源代码(我确实有)。
有#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
如果您不希望特定宏对一段代码生效并且您也知道该宏名称,则可以使用
#undef shouldShowToolbar
/* Your code */
#define shouldShowToolbar
这不会完全取消宏定义,因为您永远不知道代码的哪一部分可能真正需要它
这些是在编译时硬编码的值。如果你用你的项目编译这个库,那么你应该能够在一个稍后在编译列表中编译的文件中重新定义它们,我认为它有一个特殊的关键字。否则就像说我想在库中替换 YES。
据我所知,预处理器指令在编译之前执行。所以在那之后,就没有机会改变什么了。