Разница в расширении макросов между g++ и msvcC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Разница в расширении макросов между g++ и msvc

Сообщение Anonymous »

У меня есть служебный макрос для трансляции данного макроса всем аргументам:

Код: Выделить всё

#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]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»