C Parámetros variables
A veces, puede encontrarse con una situación en la que desea que una función tenga un número variable de parámetros, en lugar de un número predefinido de parámetros.
El lenguaje C proporciona una solución para esta situación, que le permite definir una función que pueda aceptar un número variable de parámetros según las necesidades específicas.
La forma de declaración es:
int func_name(int arg1, ...);
Donde, los puntos suspensivos...representan la lista de parámetros variables.
El siguiente ejemplo demuestra el uso de este tipo de función:
Tenga en cuenta que la funciónfunc()el último parámetro se escribe como puntos suspensivos, es decir, tres puntos (...), el parámetro anterior a los puntos suspensivos esint, que representa el número total de parámetros variables a pasar. Para usar esta funcionalidad, necesita usarstdarg.hel archivo de cabecera, que proporciona las funciones y macros para implementar la funcionalidad de parámetros variables. Los pasos específicos son:
- Defina una función con puntos suspensivos como último parámetro; antes de los puntos suspensivos puede establecer parámetros personalizados.
- En la definición de la función, cree unava_listvariable de tipo, que está definida en el archivo de cabecera stdarg.h.
- Useintel parámetro yva_start()la macro para inicializarva_listla variable como una lista de parámetros. La macrova_start()está definida en el archivo de cabecera stdarg.h.
- Useva_arg()la macro yva_listla variable para acceder a cada elemento de la lista de parámetros.
- Use la macrova_end()para limpiar la memoria asignada ava_listla variable.
Las macros comunes son:
-
va_start(ap, last_arg): inicializa la lista de parámetros variables.apes unava_listvariable de tipolast_arges el nombre del último parámetro fijo (es decir, el parámetro anterior a la lista de parámetros variables). Esta macro hace queapapunte al primer parámetro de la lista de parámetros variables. -
va_arg(ap, type): obtiene el siguiente parámetro de la lista de parámetros variables.apes unava_listvariable de tipotypees el tipo del siguiente parámetro. Esta macro devuelve un valor de tipotypey hace queapapunte al siguiente parámetro. -
va_end(ap): finaliza el acceso a la lista de parámetros variables.apes unava_listvariable de tipo. Esta macro estableceapaNULL。
Ahora, siguiendo los pasos anteriores, escribamos una función con un número variable de parámetros y devolvamos su promedio:
Ejemplo
En el ejemplo anterior, la función average() acepta un entero num y cualquier cantidad de parámetros enteros. Dentro de la función, se utiliza una variable de tipo va_list, llamada va_list, para acceder a la lista de parámetros variables. En el bucle, cada vez se usa la macro va_arg() para obtener el siguiente parámetro entero y se muestra. Finalmente, al final de la función, se usa la macro va_end() para finalizar el acceso a la lista de parámetros variables.
Cuando el código anterior se compila y ejecuta, produce los siguientes resultados. Cabe señalar que la función average()se llama dos veces, y cada vez el primer parámetro representa el número total de parámetros variables pasados. Los puntos suspensivos se utilizan para pasar un número variable de parámetros.
Average of 2, 3, 4, 5 = 3.500000 Average of 5, 10, 15 = 10.000000Otras extensiones