Почему синтаксис DEBUGLOG имеет 3 точки (...)? - PullRequest
1 голос
/ 26 мая 2011

Я видел DEBUGLOG(x,...) синтаксис. Он поддерживает DEBUGLOG(x,...) или DEBUGLOG(x...). Если мы изменим точки как DEBUGLOG(x,..), это даст ошибку. Кто-нибудь может объяснить это?

Заранее спасибо ..........

1 Ответ

3 голосов
/ 26 мая 2011

Это макрос типа variadic, то есть он принимает несколько аргументов. Это макроэквивалент C-переменной функции, такой как printf. ... означает «и все остальные аргументы, которые здесь есть, тоже подойдут».

http://gcc.gnu.org/onlinedocs/cpp/Variadic-Macros.html

Когда вызывается макрос, все токены в списке аргументов после последний названный аргумент (этот макрос имеет нет), включая запятые, становятся переменный аргумент. Эта последовательность токенов заменяет идентификатор VA_ARGS в теле макроса, где бы он ни находился.

(Я не уверен, почему «х ...» работает без запятой. Это не та форма, которую вы обычно видите.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...