【问题标题】:Is there a way to have a conditional preprocessor in c++有没有办法在 C++ 中使用条件预处理器
【发布时间】:2020-06-21 17:59:15
【问题描述】:

我想制作一个条件预处理器宏。我想做的事情就像DEBUG(LEVEL, MESSAGE),我希望它表现得像我写的那样:

#ifdef(LEVEL)
std::cout<<MESSAGE<<std::endl;
#endif

有没有办法在 C++ 中做到这一点?

这只是我想给自己的额外阅读安慰,并不重要。

【问题讨论】:

    标签: c++ preprocessor


    【解决方案1】:

    是的,你可以:

    #define LEVEL 100
    #if LEVEL == 100   
        std::cout<< "whatever";
    #endif
    

    你可以找到一个列表做指令here

    编辑:你也可以这样做:

    #define DEBUG(X,MESSAGE) if(X==100)std::cout<<MESSAGE<<endl;
    

    【讨论】:

    • 更好的是#define DMESSAGE_LEVEL 100
    • @TarickWelling 的“意义”?我的意思是,你是说为了某些预处理器行为还是为了有一个更有意义的名字?
    • 是的,我知道我可以这样做。这个问题更多是为了满足我的好奇心。 + 这种方法写起来不方便。我正在寻找更短的宏。这个想法是有类似(不工作)#define DEBUG(X,message) #ifdef(X) std::cout&lt;&lt;message&lt;&lt;std::endl;
    • 这个想法是有一个 sort of 函数,仅当定义了此调试级别时才放置代码。我目前使用#ifdef X std::cout&lt;&lt;"some debug message" &lt;&lt; std::endl; #end,但这写起来很长,需要 3 行并且使我的代码不太容易阅读
    • @laenNoCode 已发布
    【解决方案2】:

    可以在 herehere 找到有关预处理器指令的良好信息。 我个人推荐第二个链接,因为它被大量编辑了。

    回答你的代码sn-p:


    enum level
    {
        m_00,
        m_01,
        m_02,
    };
    // Create: Global Instruction 
    #define Args(_instruction_,_level_,_output_)\
    _instruction_==_level_?printf(_output_):0;
    
    #define Foo 1 // Example
    
    void main( ) 
    {
        Args( Foo, level::m_01, "Level has been verified..." ) 
    };
    

    显然,您可以更改它以满足您的需求,但想法仍然相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-30
      • 2019-06-29
      • 2013-06-06
      • 1970-01-01
      • 2023-04-07
      • 2017-04-10
      • 2021-03-11
      相关资源
      最近更新 更多