如何将变量参数Functioncall作为宏定义?

想象一下,我有一个调试源文件,如下所示:

#if _OWN_DEBUG_LEVEL != 0 void DebugLogMsg (DebugStruct_t *DebugStruct, size_t sizeID, char const *szFormat, ...); #else #define DebugLogMsg(_Expression1, _Expression2, _Expression3) ((void)0) #endif 

在这种情况下,我并不真正关心函数的其他参数,但是这个案例呢?

 #if _OWN_DEBUG_LEVEL > 0 #undef DebugLogMsg1 #define DebugLogMsg1(_Expression1, _Expression2, _Expression3) \ DebugLogMsg(_Expression1, _Expression2, _Expression3) #endif 

在这种情况下,我不太确定…当我像这样调用宏时:

 DebugLogMsg1(pointer, var, pointer, 1, 2, 3); 

_Expression3视为pointer, 1, 2, 3或什么是确切的行为?

它只是行不通。 您应该使用可变参数宏:

 #define DebugLogMsg1(a, b, c, ...) DebugLogMsg(a, b, c, __VA_ARGS__) 

或者更好(因为它不会导致尾随逗号的问题):

 #define DebugLogMsg1(...) DebugLogMsg(__VA_ARGS__)