Что значит ## __ VA_ARGS__? - PullRequest
       37

Что значит ## __ VA_ARGS__?

0 голосов
/ 19 октября 2018

Я хотел бы знать, что ## делает в этом определении макроса:

#define debug(M, ...) fprintf(stderr,M "\n",##__VA_ARGS __)

Я гуглил ответ и придумал следующее.

* ##удалит запятую, если переменные аргументы не заданы макросу.Итак, если макрос вызывается так:

debug("message");

без кавычек, он расширяется до

fprintf(stderr,"message");

, а не

fprintf(stderr,"message",);

Почему удаляется запятая

1 Ответ

0 голосов
/ 19 октября 2018

По-видимому, это непереносимый синтаксис, введенный gcc, чтобы специально иметь дело с этим угловым случаем, когда вообще не передается никаких аргументов.Без ## он будет жаловаться на то, что конечная запятая является синтаксической ошибкой.

https://gcc.gnu.org/onlinedocs/gcc/Variadic-Macros.html

https://en.cppreference.com/w/cpp/preprocessor/replace

...