Какой правильный термин для токена «...»? - PullRequest
15 голосов
/ 08 февраля 2011

Рассмотрим printf:

int printf ( const char * format, ... );

Какие термины используются для описания ... и функций, которые его используют? Я называю это многоточием, но это все равно что называть & «оператором амперсанда».

Ответы [ 8 ]

19 голосов
/ 08 февраля 2011

Список параметров переменной длины

Edit:

Или, если описывает саму функцию: Функция Variadic

14 голосов
/ 08 февраля 2011

Многоточие (, ...) p202 "K + R Язык программирования C"

8 голосов
/ 08 февраля 2011

"Эллипсис" на самом деле часто является лучшим термином здесь. Иногда мы ссылаемся на «аргументы, переданные с помощью многоточия» (C ++ 03 8.3.5p2). В контексте определения наилучшей перегруженной функции можно сказать, что аргумент «соответствует многоточию» (C ++ 03 13.3.2p2).

printf и другие подобные ему функции часто называют «переменными функциями».

Примечание. В новом стандарте C ++ 0x предлагаются два различных способа объявления и реализации функций с переменным числом (способ va_arg и способ шаблона). Но оба включают жетон эллипса.

4 голосов
/ 08 февраля 2011

Оператор эллипсиса - единственный термин, который я слышал - достаточно редко (к счастью), что вам больше ничего не нужно!

2 голосов
/ 09 февраля 2011

В дополнение к «многоточию» и «вариадной функции» можно также встретить термины «вараг» и «варагг». Похоже, это аббревиатура для «списка переменных аргументов», судя по языку, окружающему заголовок (LEGACY) <varargs.h> в POSIX .

Кроме того, основная причина, по которой термин «оператор амперсанда» не используется, заключается в том, что амперсанд может представлять собой любой из двух различных операторов , в зависимости от контекста, что делает термин неоднозначным. Это не происходит с многоточием; ему не назначено никакого другого значения, поэтому термин «многоточие» для токена «...» не подобен термину «оператор амперсанда» для токена «&».

2 голосов
/ 09 февраля 2011

Этот проект спецификации C ++ называется просто ' многоточием ', а иногда и с определенной или неопределенной статьей, как ' многоточие ' или ' многоточие '.

5.2.2 Раздел 6 «Вызов функции» содержит:

Функция может быть объявлена, чтобы принимать меньше аргументов (объявив аргументы по умолчанию (8.3.6)) или более аргументов (используя многоточие , ... 8.3.5) чем количество параметров в определении функции (8.4).

8.3.5 Раздел «Функции» содержит:

Если параметр-объявление-предложение заканчивается многоточием , количество аргументов должно быть равно или больше, чем количество параметры, которые не имеют значения по умолчанию аргумент.

8.3.6 раздел 4 содержит пример кода:

void g(int =  0, ...); // OK, ellipsis is not a parameter so it can follow
                       // a parameter with a default argument

Дополнительная педантичность: раздел 13.3.3.1.3 («Последовательности преобразования эллипса») относится к «спецификации параметра эллипса». Однако, как указано в примере кода выше, многоточие, строго говоря, не является параметром. 8.3.5 В разделе 1 объясняется, что, хотя многоточие появляется в предложении-объявления-параметра, оно следует за списком-объявлением параметров.

1 голос
/ 08 февраля 2011

Мартин и Демиан оба правы:

  • Три "." вместе образуют многоточие (на Macintosh это один специальный символ «...», но не для C ++)
  • В C ++ многоточие используется для определения списка параметров переменной длины
1 голос
/ 08 февраля 2011
...