Подтвердить что ты не робот

Двойной хэш перед параметром в вызове функции

Я вижу эту строку в C:

#define log(format, args...) snprintf(buffer + strlen(buffer), 1023 - strlen(buffer), format, ##args);

Что означает двойной фунт/хэш перед последним параметром в snprintf()?

4b9b3361

Ответ 1

В стандарте C "##" предназначен для объединения маркеров вместе внутри макроса. Здесь этот макрос не находится в стандартном C, но в "Gnu C", диалекте, реализованном GCC. "##" используется для удаления запятой, если дополнительные аргументы (в args) оказываются пустыми. См. руководство GCC.

Ответ 3

Это расширение gcc (так что args..., версия C99 должна использовать ... и __VA_ARGS__) для удаления последней запятой, если список аргументов переменных args пуст.