我有一个全局定义的符号,需要为我的源文件的给定子集有条件地未定义。所有需要特殊处理的文件都已经包含在 pre-inclusions 和 post-inclusions 中:
前.h:
#undefine mysymbol // [1]
post.h:
#define mysymbol MY_SYMBOL_DEFINITION // [2]
我的问题是,由于各种包含链接,给定的源文件可以多次包含pre.h
and 。post.h
因此,我需要1在第一次包含 pre.h 时发生,我需要2发生在最后一次包含时post.h
。从概念上讲:
pre // undefine
pre // no-op
pre // no-op
post // no-op
post // no-op
post // redefine
由于我使用的是 GCC 3.4.6,因此我无法访问可能会为我解决此问题的push 和 pop 宏编译指示。
如何使用剩余的预处理器功能模拟该行为?
我试图用预处理器来增加/减少一个值,但我不确定这是否可能。
“我到底想做什么?”
我们有宏要替换new
——new(__FILE__, __LINE__)
请参阅我关于这个主题的另一个问题——我们需要取消定义由上述前置和后置包含的源文件集中的这些宏,因为我们无法创建一个宏与其中使用的放置新语法兼容。