【发布时间】:2009-03-26 18:48:40
【问题描述】:
我有一个全局定义的符号,需要为我的源文件的给定子集有条件地未定义。所有需要特殊处理的文件都已包含在前包含和后包含中:
pre.h:
#undefine mysymbol // [1]
post.h:
#define mysymbol MY_SYMBOL_DEFINITION // [2]
我的问题是pre.h 和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 and pop macro pragmas,否则可能会为我解决此问题。
如何使用剩余的预处理器功能模拟该行为?
我试图用预处理器增加/减少一个值,但我不确定这是否可行。
“我真正想做的是什么?”
我们有用new(__FILE__, __LINE__) 替换new 的宏——参见my other question on this topic——我们需要取消定义由上述前置和后置包含的源文件集中的这些宏,因为我们是无法创建与其中使用的放置新语法兼容的宏。
【问题讨论】:
-
显而易见的问题是“你到底想做什么?”
-
@Neil -- 已添加,请参阅编辑
标签: c++ gcc macros c-preprocessor