【发布时间】:2012-01-20 14:53:44
【问题描述】:
我想知道是否可以在 C++ 中定义一个宏来定义另一个可以在以后的代码中使用的宏。这可能吗,还是 g++ 使用的预处理器对此过于有限?
【问题讨论】:
-
不是“g++ 使用的预处理器”不够强大,而是 C++ 语言本身不允许这样做。如果你解释了你想要完成的事情,我相信这里的人会想出一个解决方案。
-
你会如何被这个“限制”?分享你想要完成的事情。
我想知道是否可以在 C++ 中定义一个宏来定义另一个可以在以后的代码中使用的宏。这可能吗,还是 g++ 使用的预处理器对此过于有限?
【问题讨论】:
不,您不能在另一个宏的扩展中定义一个宏。
【讨论】:
不,您不能将宏定义为宏。
【讨论】:
预处理器只对源代码进行一次传递,因此这是不可能的。但是,您可以使用外部工具在编译之前执行一些预处理,例如 m4。
【讨论】:
你可以做这样的事情,它不是你想要的,但它可能会有所帮助。
#ifdef ENABLE_MACRO_1
#define PRINT_MACRO(varName) \
std::cout<<varName<<std::endl;
#else
#define PRINT_MACRO(varName) \
//do nothing
#endif
因此,您可以根据已定义的另一个前体条件定义宏。
【讨论】: