Я видел DEBUGLOG(x,...) синтаксис. Он поддерживает DEBUGLOG(x,...) или DEBUGLOG(x...). Если мы изменим точки как DEBUGLOG(x,..), это даст ошибку. Кто-нибудь может объяснить это?
DEBUGLOG(x,...)
DEBUGLOG(x...)
DEBUGLOG(x,..)
Заранее спасибо ..........
Это макрос типа variadic, то есть он принимает несколько аргументов. Это макроэквивалент C-переменной функции, такой как printf. ... означает «и все остальные аргументы, которые здесь есть, тоже подойдут».
printf
...
http://gcc.gnu.org/onlinedocs/cpp/Variadic-Macros.html
Когда вызывается макрос, все токены в списке аргументов после последний названный аргумент (этот макрос имеет нет), включая запятые, становятся переменный аргумент. Эта последовательность токенов заменяет идентификатор VA_ARGS в теле макроса, где бы он ни находился.
(Я не уверен, почему «х ...» работает без запятой. Это не та форма, которую вы обычно видите.)