Двойной хеш перед параметром в вызове функции - PullRequest
12 голосов
/ 24 октября 2011

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

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

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

Ответы [ 3 ]

13 голосов
/ 24 октября 2011

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

.
2 голосов
/ 24 октября 2011

Это "токен-вставка" препроцессор оператор , и я не думаю, что макрос использует его правильно.

1 голос
/ 24 октября 2011

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

...