2010-03-03 25 views
6

¿Qué significa esto?¿Qué significa "..." en una declaración de función C?

void message(int x, int y, ...) 

No puedo entender qué ... es. ¿Alguien puede explicarlo?

+1

Una cosa relacionada que vale la pena tener en cuenta es que en C los parámetros de funciones vacías() significan lo mismo que (...), es decir, que la función puede tomar cualquier parámetro. Debe usar (void) para indicar que no necesita ninguno. En C++() significa que no toma ninguno, como uno esperaría. – Tronic

+2

Una lista de parámetros vacía '()' no ** significa ** lo mismo que '(...)'. Una lista de parámetros vacía significa que la función toma un número fijo, pero no especificado, de aumentos. '(...)' significa que toma una cantidad variable de argumentos (y es bastante inútil, porque la función nunca podrá acceder a esos argumentos sin al menos un argumento fijo). – caf

Respuesta

5

Número de parámetros no especificados/variables. Para hacer frente a esta función hay que usar el tipo va_list y va_start, va_arg y funciones va_end:

Un ejemplo tomado de here:

#include <stdlib.h> 
     #include <stdarg.h> 
     #include <stdio.h> 

     int maxof(int, ...) ; 
     void f(void); 

     main(){ 
       f(); 
       exit(EXIT SUCCESS); 
     } 

     int maxof(int n args, ...){ 
       register int i; 
       int max, a; 
       va_list ap; 

       va_start(ap, n args); 
       max = va_arg(ap, int); 
       for(i = 2; i <= n_args; i++) { 
         if((a = va_arg(ap, int)) > max) 
           max = a; 
       } 

       va_end(ap); 
       return max; 
     } 

    void f(void) { 
      int i = 5; 
      int j[256]; 
      j[42] = 24; 
      printf("%d\n",maxof(3, i, j[42], 0)); 
    } 

se pueden encontrar más detalles here

+0

su código y sugerencia me ayuda mucho. thaks – ambika

8

... denota una variable lista de argumentos a los que se puede acceder a través de va_arg, va_end and va_start.

+0

algunos buenos programadores están aquí. usted es uno de ellos. muchas gracias – ambika

3

Ha definido un mensaje de función en alguna parte que toma al menos dos argumentos de tipo int y luego algunos argumentos opcionales indicados por "...". (printf es otra función que toma argumentos opcionales).

Se puede acceder a los argumentos opcionales usando las funciones va_*.

0

Es la variable argumento parámetro formal. Desde la perspectiva sintáctica, le permite pasar una cantidad variable de parámetros (al menos dos, que son x e y, pero aún más).

2

... representa el argumento final pasado como una matriz o como una secuencia de argumentos.

Cuestiones relacionadas