Код: Выделить всё
#define NUM_ARGS_IMPL( \
_1, _2, _3, _4, _5, _6, _7, _8, _9, \
//... many placeholders
_90,_91,_92,_93,_94,_95,_96,_97,_98,_99, \
N, ...) N
#define NUM_ARGS_EXPAND(tuple) NUM_ARGS_IMPL tuple
#define NUM_ARGS(...) NUM_ARGS_EXPAND((__VA_ARGS__, \
99,98,97,96,95,94,93,92,91,90, \
//... many numbers
9,8,7,6,5,4,3,2,1,0 \
))
#define INVOKE_MACRO(macro_name, ...) macro_name(__VA_ARGS__)
#define BROADCAST_1(macro_name, first ) INVOKE_MACRO(macro_name, first)
#define BROADCAST_2(macro_name, first, ...) INVOKE_MACRO(macro_name, first) BROADCAST_1(macro_name, __VA_ARGS__)
#define BROADCAST_3(macro_name, first, ...) INVOKE_MACRO(macro_name, first) BROADCAST_2(macro_name, __VA_ARGS__)
//... go through 1 to 99
#define BROADCAST_99(macro_name, first, ...) INVOKE_MACRO(macro_name, first) BROADCAST_98(macro_name, __VA_ARGS__)
#define BROADCAST_EXPAND(macro_name, N, ...) BROADCAST_ ## N(macro_name, __VA_ARGS__)
#define BROADCAST_N(macro_name, N, ...) BROADCAST_EXPAND(macro_name, N, __VA_ARGS__)
/** uitl macro for broadcasting here */
#define BROADCAST(macro_with_one_param, ...) BROADCAST_N(macro_with_one_param, NUM_ARGS(__VA_ARGS__), __VA_ARGS__)
/** using broadcasting */
#define STR_OSTREAM(msg)
Подробнее здесь: [url]https://stackoverflow.com/questions/79340562/macro-expansion-differs-bettwen-g-and-msvc[/url]