La mayoría de funciones aceptan un número fijo de argumentos. Algunas aplicaciones , sin embargo, requieren funciones a aceptar parámetros variables . Un ejemplo bien conocido es la función de impresión de C. Para estos casos , C + + ofrece una potente solución que permite al compilador descifrar los argumentos en tiempo de ejecución . Siga leyendo para conocer un tutorial que muestra cómo implementar dichas funciones. Cosas que necesitará
Intermedio C + +
compilador C + + con el IDE, como Microsoft Visual C + +
Mostrar más instrucciones
1
Añada el archivo de biblioteca stdarg.h en su programa. Ahí es donde se definen las macros. En la primera línea del archivo , introduzca # include .
2
Utilice las macros va_arg va_start y v_end que colaboran con el va_type en stdarg.h .
3
Establecer una variable de tipo va_list para funcionar como un marcador de la lista .
4
Acceso a los parámetros individuales utilizando la macro va_arg . Encontrar una manera de decirle a la macro va_arg qué tipo de argumento que desee para recuperar para abastecer el número correcto de bytes de la pila.
5
convertir el resultado del paso 4 para el tipo que desea que a ser.
6
Llame al macro va_end poner fin a la tramitación de los parámetros variables .
7
Mira el siguiente ejemplo que demuestra los pasos 2 a 6. Función myprintf acepta una cadena de formato que especifica el tipo y la posición de cada argumento . A raíz de la cadena de formato es la lista de argumentos. La función imprime los argumentos. Por simplicidad , sólo puede procesar int , float y carácter:
//declaración
void myprintf (char * formato , ...) ;
/defintion
void myprintf (formato * /char . ..) {
va_list vl ;
int i;
va_start ( vl , args ) ;
for (i = 0 ; args [ i ] = ' \\ 0 ' ; ! + + i ) {
unión any_t
{ int i;
float f ;
char c ;
} adicionales ;
if ( args [ i ] == ' i ') {
any.i = va_arg ( vl , int) ;
printf ("% i \\ n", any.i ) ;
} else if ( args [ i ] == ' f ') {
any.f = va_arg ( vl , float ) ;
printf ("% f \\ n", any.f ) ;
} else if ( args [ i ] == ' c' ) {
any.c = va_arg ( vl , char) ;
printf ("% c \\ n", any.c ) ;
} else {
tiro SomeException ;
}
va_end ( vl ) ; }