Si. Es exactamente el principio de printf: accepta cualquier numero de parametros. Esta manera de hacer necesita alugunas macro (va_list, va_start, va_end,..., ver
la pagina de la msdn, por ejemplo. No encuentro nada en español).
No hay que cunfundir
una funccion con paremetros que tienen valores por defecto, con
una funccion con parametros opcionales. Poner valores por defecto a los parametros permite tambien que algunos parametros sean opcionales, pero el numero de parametros es fijo, aunque en una funccion con parametros opcionales, el numero de parametros es ilimitado. Hay algunas limites, como pro ejemplo, todos los parametros opcionales tienen que ser del mismo tipo, pero no me acuerdo de todo, eso es C y soy mas de C++.
Mirad por ejemplo la funccion del ejemplo de la msdn:
Código:
void testit ( int i, ...) // el secreto esta esto, lo tres puntos
{
va_list argptr; // esta linea declara la lista de parametros
va_start(argptr, i); // esta linea empieza el bucle sobre la lista de parametros (sin saber el numero de parametros)
if ( i == 0 ) {
int n = va_arg( argptr, int ); // esto es para recuperar el valor de cada parametro segun su tipo
printf( "%d\n", n );
} else {
char *s = va_arg( argptr, char* );
printf( "%s\n", s);
}
}
Hope it helps.