C++ 宏是否包含if?

C++ 宏是否包含if?,c++,visual-studio-2010,c-preprocessor,C++,Visual Studio 2010,C Preprocessor,有可能这样做吗?请看以下代码: #define MyMacro(...) SomeFunction(arg1, arg2, arg3) 现在,我想有条件地编译第二个参数: #define MyMacro(...) SomeFunction(arg1, #if CONDITION arg2, #endif arg3) 这实际上并没有编译,但它显示了我想要实现的目标-当满足条件时,我希望MyMacro使用SomeFunction的3参数版本,否则使用2参数版本 当然,在这里我可以

有可能这样做吗?请看以下代码:

#define MyMacro(...) SomeFunction(arg1, arg2, arg3)
现在,我想有条件地编译第二个参数:

#define MyMacro(...) SomeFunction(arg1,
#if CONDITION
    arg2,
#endif
    arg3)
这实际上并没有编译,但它显示了我想要实现的目标-当满足
条件时,我希望
MyMacro
使用
SomeFunction
的3参数版本,否则使用2参数版本


当然,在这里我可以显式地编写两个函数调用,但在我的程序中,我实际上有3个“条件”参数,这将给我8个组合

查看boost::preprocessor了解更多详细信息

其思路如下:

#include <iostream>

#define SELECT0(ARG1, ARG2) ARG1
#define SELECT1(ARG1, ARG2) ARG2
#define SELECT(COND_0_OR_1, ARG1, ARG2) SELECT##COND_0_OR_1(ARG1, ARG2)

const char * s = 
SELECT(0, "arg1", "arg2");

int main(void) {

  std::cout<<s;  
  return 0;
}
#包括
#定义SELECT0(ARG1、ARG2)ARG1
#定义SELECT1(ARG1、ARG2)ARG2
#定义选择(条件0或条件1,ARG1,ARG2)选择条件0或条件1(ARG1,ARG2)
常量字符*s=
选择(0,“arg1”、“arg2”);
内部主(空){

std::couthm我会像#ifdef condition#define mymacro something#else#define mymacro something#endifAs我写的那样做-我知道我可以做到,但有8个组合(我有不止一个这样的函数)我真的想避免它。您可以使用一个helper宏来有条件地选择参数。这看起来是什么样子的?好的,但这会选择2个参数中的1个。如何有条件地删除参数?创建一个空的define:#define SELECT0(ARG1,ARG2)或使用SELECT(CONDITION,ARG2)+1因为它解决了我的问题,但我选择了Michael Burr的答案,因为它更简单(因此更好)。当你看到你认为“为什么我没有想到?!”的答案时,这就是那种解决方案。现在看起来很明显。@NPS我不会说它是“明显的”,我也不会说它是非常可维护的,除非你真的把条件和宏定义紧密地耦合在源代码中(否则有人(包括你自己几个月后)可能会说“嘿,为什么那里没有逗号?”,添加逗号并导致奇怪的错误)。还有另一个答案(不幸的是,现在被删除了)我认为更清楚。它在条件中定义了
MyMacro
#if CONDITION
#define ARG2 arg2,
#else
#define ARG2
#endif

#define MyMacro(...) SomeFunction(arg1, ARG2 arg3)