C++ 如何根据不同的参数定义相同的宏函数

C++ 如何根据不同的参数定义相同的宏函数,c++,macros,C++,Macros,因此,当VA_ARGS为空时,我得到一个编译时错误“expected primary expression before')'token”。任何修复编译错误的方法 #define UPUT_SET_CHECK_POINT1(appType, tag, argNum1, v1, ...) \ if(NUMARGS(##__VA_ARGS__) == 0) \ UPUT_SET_CHECK_POINTx(1, appType, tag, argNum1, v1, UPUT

因此,当VA_ARGS为空时,我得到一个编译时错误“expected primary expression before')'token”。任何修复编译错误的方法

#define UPUT_SET_CHECK_POINT1(appType, tag, argNum1, v1, ...)  \

if(NUMARGS(##__VA_ARGS__) == 0)           \
UPUT_SET_CHECK_POINTx(1, appType, tag,  argNum1, v1,  UPUT_P_INVALID, 0, UPUT_P_INVALID, 0, UPUT_P_INVALID, 0, UPUT_P_INVALID, 0, __FILE__, __LINE__, UPUT_SEQUENTIAL);                   \
else                                     \
UPUT_SET_CHECK_POINTx(1, appType, tag,  argNum1, v1,  UPUT_P_INVALID, 0, UPUT_P_INVALID, 0, UPUT_P_INVALID, 0, UPUT_P_INVALID, 0, __FILE__, __LINE__ , __VA_ARGS__) 
如果您使用的是GCC,请在
\uu VA\u ARGS\uu
为空时删除逗号

void UPUT_SET_CHECK_POINTx(int numArg, CtblAppType appType, int tag, UputArgPos argNum1, int v1, UputArgPos argNum2, int v2, UputArgPos argNum3, int v3, UputArgPos argNum4, int v4, UputArgPos argNum5, int v5, char* fileName, unsigned int lineNumber, UputCheckPointAlgo checkPointAlgo=UPUT_SEQUENTIAL);

另见。如果您必须使用预处理器,则没有标准的解决方法。

您不能只使用模板吗?这似乎是一种编译和不可读的方法,您可以尝试执行任何操作。将有一个更简单、类型安全且更易于阅读的解决方案。UPUT\U SET\U CHECK\U POINT1是一个存在于2000个文件中的函数,我不想接触这些文件,因此我想将其设置为宏,并用UPUT\U SET\U CHECK函数替换_POINTx@PawanKumarSrivastava-您仍然可以很好地使用模板
#define UPUT_SET_CHECK_POINT1(appType, tag, argNum1, v1, ...)  \
    UPUT_SET_CHECK_POINTx(1, appType, tag,  argNum1, v1, \
                          UPUT_P_INVALID, 0, \
                          UPUT_P_INVALID, 0, \
                          UPUT_P_INVALID, 0, \
                          UPUT_P_INVALID, 0, \
                          __FILE__, __LINE__ , ## __VA_ARGS__)