Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / FAQ / Как мне передать переменное число параметров в макрос (С++)

Как мне передать переменное число параметров в макрос (С++)

Переменное число параметров в макрос можно передавать только в случае использования компиляторов VC 8.0 и старше (MS Visual Studio 2005), либо gcc 3.0 и старше.

Нужно использовать определение __VA_ARGS__

#define dprintf(...) realdprintf(__FILE__, __LINE__, __VA_ARGS__)

В случае GCC также можно использовать оператор ..., которое пишется сразу за названием параметра, чем достигается лучшая читаемость кода:

#define debug(format, args...) fprintf (stderr, format, args)

Нужно учесть, что препроцессор С не разрешает не передавать переменный аргумент, что выливается в то, что следующий код приведёт к ошибке:

debug ("A message")

Хотя разрешает передать пустой аргумент.

Препроцессор C++ не настолько строг, поэтому он просто сгенерирует warning.
Для того, чтобы избежать этого, нужно пользоваться оператором ##.

#define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)
#define debug(format, args...) fprintf (stderr, format, ##args )

В данном случае препроцессор будет особо обрабатывать конструкцию - если переменные параметры не передаются, то запятая перед ##__VA_ARGS__ будет убрана, и сообщения об ошибке не будет. Если же параметр присутствует, то макрос будет развёрнут как обычно.

14 мая 2007

Комментарии:
Lamer-ProgrammerПостоялецwww19 июля 201121:43#1
макросы - зло
OckonalПостоялецwww19 июля 201122:04#2
Freem@n
Но иногда очень удобны.
WraithПостоялецwww19 июля 201123:51#3
Ух ты, а faq кто-то все-таки читает!
Lamer-ProgrammerПостоялецwww21 июля 201119:00#4
ага заглянул чёт делать то нечего

/ Форум / Программирование игр

Тема в архиве.

2001—2017 © GameDev.ru — Разработка игр