Пожалуйста, помогите мне понять это объявление параметра C ++ с аргументом - PullRequest
6 голосов
/ 20 марта 2012

Я ежедневно использую библиотеки ROOT C ++ (root.cern.ch) и просматривал источник, когда наткнулся на объявление этой функции:

TString TString::Format(const char *va_(fmt), ...)
{
    //etc.

Его можно найти здесь .

Я не понимаю, как у const char * может быть аргумент или скобка в его имени.Выражение va_(fmt) позже используется как простой const char *, даже если оно выглядит как вызов функции или конструктор.Сначала я подумал, что это как-то связано со списком аргументов переменных, что также было для меня новым, но чтение документации по stdarg.h вообще не помогло с этим вопросом.

Очень трудноГугл за помощью, так как я не совсем уверен, как это назвать.Объявление с аргументом?Это не дает хороших результатов.

Раньше я думал, что знаю C ++, но что здесь происходит?Будем благодарны за любую помощь.

1 Ответ

11 голосов
/ 20 марта 2012

Это макрос - в Varargs.h:

#if ...
#  define va_(arg) __builtin_va_alist
#else
#  define va_(arg) arg
#endif
...