Я хотел бы знать, что ##
делает в этом определении макроса:
#define debug(M, ...) fprintf(stderr,M "\n",##__VA_ARGS __)
Я гуглил ответ и придумал следующее.
* ##
удалит запятую, если переменные аргументы не заданы макросу.Итак, если макрос вызывается так:
debug("message");
без кавычек, он расширяется до
fprintf(stderr,"message");
, а не
fprintf(stderr,"message",);
Почему удаляется запятая