2011-02-08 25 views
15

Considere printf:¿Cuál es el término correcto para el token '...'?

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

¿Cuáles son los términos utilizados para describir la ... y las funciones que lo utilizan? Lo he estado llamando puntos suspensivos, pero eso es como llamar al & el "operador de y comercial".

+14

* Elipsis * es el término utilizado para '...' en el estándar. Se aplica al token '...' específicamente. La función declarada con puntos suspensivos en la lista de parámetros se llama función * variadic *. – AnT

+6

El término técnico realmente correcto es el operador * dot dot dot *. –

+2

@ Noah Roberts: Es sorprendente escucharlo, ya que no es un operador. – caf

Respuesta

4

Operador de elipsis es el único término que he escuchado, ¡es lo suficientemente raro (afortunadamente) que no necesita nada más!

+4

¿Qué pasa con dotdotdot? ? Es divertido decir :) – Oystein

+0

@ Øystein Eso es lo que originalmente busqué, ya que Google simplemente ignoró "...." (Sí, es un período después de una elipsis.) – Maxpm

+1

@Maxpm: en momentos como estos, los británicos la convención para comillas es útil. – SamB

1

Martin y Demian los dos tienen razón:

  • Los tres". " juntos forman una elipsis (En Macintosh esto es un único carácter especial "...", pero no se puede utilizar para C++)
  • En C++ una elipsis se utiliza para definir una lista de parámetros de longitud variable
8

"Puntos suspensivos "de hecho es a menudo el mejor término aquí. A veces nos referimos a "argumentos pasados ​​usando los puntos suspensivos" (C++ 03 8.3.5p2). En el contexto de averiguar la mejor función sobrecargada, se puede decir que un argumento "coincide con la elipsis" (C++ 03 13.3.2p2).

printf y otras funciones como esta a menudo se denominan "funciones variadas".

Nota: El próximo estándar C++ 0x ofrece dos formas diferentes de declarar e implementar funciones variadas (el modo va_arg y el modo de plantilla). Pero ambos involucran la ficha de puntos suspensivos.

+0

(Bueno, esta pregunta se etiquetó originalmente C++.) – aschepler

14

Ellipsis notación (, ...) P202 "K + R El Lenguaje de Programación C"

+3

+1 (como referencia) –

2

This C++ draft specification se refiere a él simplemente como 'puntos suspensivos' y, a veces con un artículo definido o indefinido, como 'una elipsis 'o' la elipsis '.

5.2.2 "Función llamada" sección 6 contiene:

Una función puede ser declarada de aceptar un menor número de argumentos (declarando parámetros por defecto (8.3.6)) o más argumentos (mediante el uso de la elipsis, ... 8.3.5) que el número de parámetros en la definición de la función (8.4).

8.3.5 "Funciones" sección 2 contiene:

Si el parámetro-declaración-cláusula termina con una elipsis, el número de argumentos será igual a o mayor que el número de parámetros que no lo hacen tener un argumento predeterminado .

8.3.6 sección 4 contiene código de ejemplo:

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

pedantry adicional: sección 13.3.3.1.3 ("secuencias de conversión suspensivos") se refiere a "la especificación de parámetros de puntos suspensivos". Sin embargo, como se indica en el código de ejemplo anterior, la elipsis no es, estrictamente hablando, un parámetro. 8.3.5 La sección 1 explica que, aunque la elipsis aparece en la cláusula parameter-declaration, sigue el parámetro-declaration-list.

2

Además de "ellipsis" y "función variadic", también se ven los términos "vararg" y "varargs". Esto parece ser una abreviatura para "lista de argumentos variables", a juzgar por el lenguaje que rodea al encabezado (LEGACY) <varargs.h> in POSIX.

Además, la razón principal de que el término "operador signo" no se utiliza es que el signo puede representar cualquiera de dos diferentes operadores, dependiendo del contexto, lo que haría que el término ambiguo. Esto no ocurre con la elipsis; no hay otro significado asignado a él, por lo que usar el término "puntos suspensivos" para el token "..." es no como usar el término "operador de y comercial" para el token "&".

Cuestiones relacionadas