C++条件宏评估

Dav*_*ron 5 c++ macros gcc c-preprocessor

我有一个全局定义的符号,需要对我的源文件的给定子集有条件地定义.所有需要特殊处理的文件都已包含在包含前后的内容中:

pre.h:

#undefine mysymbol // [1]
Run Code Online (Sandbox Code Playgroud)

post.h:

#define mysymbol MY_SYMBOL_DEFINITION // [2]
Run Code Online (Sandbox Code Playgroud)

我的问题是,pre.hpost.h可以包括对于给定的源文件多次因各种包含链接.因此,我需要1到发生第一次pre.h包括在内,我需要2发生的最后一次post.h被包括在内.概念:

pre         // undefine
   pre      // no-op
      pre   // no-op
      post  // no-op
   post     // no-op
post        // redefine
Run Code Online (Sandbox Code Playgroud)

由于我使用的是GCC 3.4.6,因此我无法访问可能为我解决此问题的push和pop宏pragma.

如何使用剩余的预处理器功能模拟该行为?

我试图用预处理器来增加/减少一个值,但我不确定这是可能的.

"我到底想要做什么?"

我们有宏替换newnew(__FILE__, __LINE__)-看到关于这个主题我的其他问题 -我们需要取消定义这些宏在被包裹组源文件的前置和后置包括上述,因为我们无法创建一个宏,是与其中使用的放置新语法兼容.

Ass*_*vie 0

通过像 Loki 那样的元编程魔法,可以在编译时递增/递减一个值。但你确定这是必要的吗?

为什么你的h文件被包含了这么多次?为什么不使用包含防护?