En el lenguaje C, las funciones pueden aceptar un número fijo o variable de argumentos. Las funciones estándar se definen de la siguiente manera:
int sum(int a, int b) { return a + b; }
Para el número variable de argumentos se utiliza el macro <stdarg.h>, lo que permite procesar diferentes cantidades de parámetros de entrada.
Ejemplo:
#include <stdarg.h> #include <stdio.h> int sum(int count, ...) { int total = 0; va_list args; va_start(args, count); for (int i = 0; i < count; ++i) { total += va_arg(args, int); } va_end(args); return total; }
¿En qué se diferencian las funciones con un número variable de argumentos de las funciones sobrecargadas, y cómo implementar la sobrecarga en C?
Respuesta: En C no hay soporte para la sobrecarga de funciones como en C++: el nombre de la función y la cantidad de argumentos deben ser únicos. Los argumentos variables implementan una interfaz universal, pero no es "sobrecarga".
Ejemplo (incorrecto):
// Esto no funcionará en C, ya que no se pueden crear dos funciones con el mismo nombre: int foo(int a); float foo(float b); // Error de compilación.
Historia
Historia
va_end, lo que provocó una fuga de recursos en algunas arquitecturas. Los síntomas solo se manifestaron tras múltiples llamadas a la función.Historia
Al procesar una función con argumentos variables se utilizó va_list dos veces sin llamar a va_copy, lo que causó un comportamiento impredecible. El error no se manifestó de inmediato, sino solo después de cambios en el compilador.