Macro expansion (erroneously) does not trigger argument recount. Therefore, any time macro expansion of a function invocation results in a different number of arguments, it must be forced to recount the number of arguments.
Use this pattern to force expansion and recount before invocation:
//Step 1: wrap the entire affected argument pack in parenthesis
#define mFn(A, ExpandingArgument) mFn1((A, ExpandingArgument))
//Step 2: intermediary layer without ## or # is required to actually expand
#define mFn1(...) mFn2(__VA_ARGS__)
//Step3: Paste the parenthesized arguments to final function identifier to trigger
// function like macro interpretation and invocation
#define mFn2(...) mFn3##__VA_ARGS__
//Step4: Implement the actual function as if the standard were written correctly
#define mFn3(A,B,C,...) //Do things
m4
orgpp
); it is not a job the the standard C preprocessor – Basile Starynkevitch