El argumento de longitud variable es una característica que permite que una función reciba cualquier cantidad de argumentos. Hay situaciones en las que queremos que una función maneje un número variable de argumentos según los requisitos.
1) Suma de números dados.
2) Mínimo de números dados.
y muchos más.
El número variable de argumentos está representado por tres puntos (…)
A continuación se muestra un ejemplo para encontrar el mínimo de un conjunto dado de enteros.
// C program to demonstrate use of variable // number of arguments. #include <stdarg.h> #include <stdio.h> // this function returns minimum of integer // numbers passed. First argument is count // of numbers. int min(int arg_count, ...) { int i; int min, a; // va_list is a type to hold information about // variable arguments va_list ap; // va_start must be called before accessing // variable argument list va_start(ap, arg_count); // Now arguments can be accessed one by one // using va_arg macro. Initialize min as first // argument in list min = va_arg(ap, int); // traverse rest of the arguments to find out minimum for (i = 2; i <= arg_count; i++) if ((a = va_arg(ap, int)) < min) min = a; // va_end should be executed before the function // returns whenever va_start has been previously // used in that function va_end(ap); return min; } // Driver code int main() { int count = 5; printf("Minimum value is %d", min(count, 12, 67, 6, 7, 100)); return 0; }
Aquí usamos macros para implementar la funcionalidad de argumentos variables.
- Utilice la variable de tipo va_list en la definición de la función.
int a_function(int x, ...) { va_list a_list; va_start( a_list, x ); }
- Utilice el parámetro int y la macro va_start para inicializar la variable va_list en una lista de argumentos. La macro va_start se define en el archivo de encabezado stdarg.h.
- Utilice la macro va_arg y la variable va_list para acceder a cada elemento de la lista de argumentos.
- macro va_end para limpiar la memoria asignada a la variable va_list.
Otro ejemplo :
// C program to demonstrate working of // variable arguments to find average // of multiple numbers. #include <stdarg.h> #include <stdio.h> int average(int num, ...) { va_list valist; int sum = 0, i; va_start(valist, num); for (i = 0; i < num; i++) sum += va_arg(valist, int); va_end(valist); return sum / num; } // Driver code int main() { printf("Average of {2, 3, 4} = %d\n", average(2, 3, 4)); printf("Average of {3, 5, 10, 15} = %d\n", average(3, 5, 10, 15)); return 0; }
Producción:
Average of {2, 3, 4} = 3 Average of {3, 5, 10, 15} = 10
Publicación traducida automáticamente
Artículo escrito por Shivani Baghel 1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA