【发布时间】:2020-06-21 17:59:15
【问题描述】:
我想制作一个条件预处理器宏。我想做的事情就像DEBUG(LEVEL, MESSAGE),我希望它表现得像我写的那样:
#ifdef(LEVEL)
std::cout<<MESSAGE<<std::endl;
#endif
有没有办法在 C++ 中做到这一点?
这只是我想给自己的额外阅读安慰,并不重要。
【问题讨论】:
标签: c++ preprocessor
我想制作一个条件预处理器宏。我想做的事情就像DEBUG(LEVEL, MESSAGE),我希望它表现得像我写的那样:
#ifdef(LEVEL)
std::cout<<MESSAGE<<std::endl;
#endif
有没有办法在 C++ 中做到这一点?
这只是我想给自己的额外阅读安慰,并不重要。
【问题讨论】:
标签: c++ preprocessor
是的,你可以:
#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
#define DEBUG(X,message) #ifdef(X) std::cout<<message<<std::endl;
#ifdef X std::cout<<"some debug message" << std::endl; #end,但这写起来很长,需要 3 行并且使我的代码不太容易阅读
可以在 here 和 here 找到有关预处理器指令的良好信息。 我个人推荐第二个链接,因为它被大量编辑了。
回答你的代码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..." )
};
显然,您可以更改它以满足您的需求,但想法仍然相同。
【讨论】: