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