Quiero definir una función en lenguaje C que puede tomar un número ilimitado de argumentos de cualquier tipo de datos. Por ejemplo: printf()
, scanf()
, etc.Función en C con argumentos ilimitados?
¿Alguna idea de esto?
Quiero definir una función en lenguaje C que puede tomar un número ilimitado de argumentos de cualquier tipo de datos. Por ejemplo: printf()
, scanf()
, etc.Función en C con argumentos ilimitados?
¿Alguna idea de esto?
Para utilizar un número variable de argumentos en C que necesita para incluir la cabecera
#include <stdarg.h>
printf()
en C es un ejemplo de función que toma un número variable de argumentos.
int printf(const char *fmt, ...)
Más información here
¿Cómo podemos acceder a los argumentos en orden aleatorio? El enlace nos muestra solo la forma de acceder a ellos secuencialmente. –
void printf(char* format, ...)
{
}
Mirar hacia arriba Variadic Functions y varargs.h
o stdarg.h
(dependiendo del compilador).
No debe haber ningún compilador todavía en uso que todavía requiera '
Consulte el encabezado <stdarg.h>
y la documentación relacionada.
declara la función como tomar un último argumento ...
. Tendrá que usar las macros de <stdarg.h>
para acceder a los argumentos como va_list
.
Si lo que desea es algo "como printf
, pero con un comportamiento un poco extra", entonces puede pasar de la va_list
-vprintf
, vfprintf
o vsprintf
.
#include <stdarg.h>
#include <stdio.h>
#include <time.h>
#ifdef __GNUC__
__attribute__((format(printf, 1, 2)))
#endif
void PrintErrorMsg(const char* fmt, ...)
{
time_t now;
char buffer[20];
va_list args;
va_start(args, fmt);
time(&now);
strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", gmtime(&now));
fprintf(stderr, "[%s] ", buffer);
vfprintf(stderr, fmt, args);
fputc('\n', stderr);
va_end(args);
}
* Nota: Probablemente es mejor evitarlo siempre que sea posible ... –
no puede escribir una función que puede tomar un número "ilimitado" de argumentos. Siempre hay un límite superior. Lo que probablemente quiso decir es, número de argumentos "variables". – Nawaz