Las funciones variádicas son funciones que pueden tomar un número variable de argumentos . En programación C , una función variádica agrega flexibilidad al programa. Toma un argumento fijo y luego se puede pasar cualquier número de argumentos. La función variádica consiste en al menos una variable fija y luego una elipsis (…) como último parámetro.
Sintaxis:
int function_name(data_type variable_name, ...);
Se puede acceder a los valores de los argumentos pasados a través del archivo de encabezado denominado como:
#include <stdarg.h>
<stdarg.h> incluye los siguientes métodos:
Métodos |
Descripción |
va_start(va_list ap, argN) | Esto permite el acceso a los argumentos de la función variádica. |
va_arg(va_list ap, tipo) | Éste accede al siguiente argumento de la función variádica. |
va_copy(va_list destino, va_list src) | Esto hace una copia de los argumentos de la función variádica. |
va_end(va_list ap) | Esto finaliza el recorrido de los argumentos de la función variádica. |
Aquí, va_list contiene la información que necesitan va_start , va_arg , va_end y va_copy .
Programa 1:
El siguiente programa simple en C demostrará el funcionamiento de la función variádica AddNumbers() :
C
// C program for the above approach #include <stdarg.h> #include <stdio.h> // Variadic function to add numbers int AddNumbers(int n, ...) { int Sum = 0; // Declaring pointer to the // argument list va_list ptr; // Initializing argument to the // list pointer va_start(ptr, n); for (int i = 0; i < n; i++) // Accessing current variable // and pointing to next one Sum += va_arg(ptr, int); // Ending argument list traversal va_end(ptr); return Sum; } // Driver Code int main() { printf("\n\n Variadic functions: \n"); // Variable number of arguments printf("\n 1 + 2 = %d ", AddNumbers(2, 1, 2)); printf("\n 3 + 4 + 5 = %d ", AddNumbers(3, 3, 4, 5)); printf("\n 6 + 7 + 8 + 9 = %d ", AddNumbers(4, 6, 7, 8, 9)); printf("\n"); return 0; }
Variadic functions: 1 + 2 = 3 3 + 4 + 5 = 12 6 + 7 + 8 + 9 = 30
Programa 2: a continuación se muestra el programa en C que consta de la función variádica LargestNumber() :
C
// C program for the above approach #include <stdarg.h> #include <stdio.h> // Variadic function to find the largest number int LargestNumber(int n, ...) { int max = 0; // Declaring pointer to the // argument list va_list ptr; // Initializing argument to the // list pointer va_start(ptr, n); for (int i = 0; i < n; i++) { // Accessing current variable // and pointing to next int temp = va_arg(ptr, int); max = temp > max ? temp : max; } // End of argument list traversal va_end(ptr); return max; } // Driver Code int main() { printf("\n\n Variadic functions: \n"); // Variable number of arguments printf("\n %d ", LargestNumber(2, 1, 2)); printf("\n %d ", LargestNumber(3, 3, 4, 5)); printf("\n %d ", LargestNumber(4, 6, 7, 8, 9)); printf("\n"); return 0; }
Variadic functions: 2 5 9