Двойной хэш перед параметром в вызове функции
Я вижу эту строку в C:
#define log(format, args...) snprintf(buffer + strlen(buffer), 1023 - strlen(buffer), format, ##args);
Что означает двойной фунт/хэш перед последним параметром в snprintf()
?
Ответы
Ответ 1
В стандарте C "##
" предназначен для объединения маркеров вместе внутри макроса. Здесь этот макрос не находится в стандартном C, но в "Gnu C", диалекте, реализованном GCC. "##
" используется для удаления запятой, если дополнительные аргументы (в args
) оказываются пустыми. См. руководство GCC.
Ответ 2
Что "token-pasting" препроцессор , и я не думаю, что макрос использует его правильно.
Ответ 3
Это расширение gcc (так что args...
, версия C99 должна использовать ...
и __VA_ARGS__
) для удаления последней запятой, если список аргументов переменных args
пуст.