MU_DO_COUNTED(3, MY_MACRO, a,b,c ) would expand to MY_MACRO(3, a,b,c) MY_MACRO(2, a,b,c) MY_MACRO(1, a,b,c) and while at it, change MU_DO to not execute 1 times more than expected.