Tecnología

Inicio

Cómo utilizar las funciones parámetro variable en C ++

La mayoría de las funciones aceptan un número fijo de argumentos. Algunas aplicaciones, sin embargo, requieren funciones para aceptar los parámetros variables. Un ejemplo bien conocido es la función de impresión de C. Para tales casos, C ++ ofrece una potente solución que permite que el compilador de descifrar los argumentos en tiempo de ejecución. Siga leyendo para obtener un tutorial que muestra cómo implementar dichas funciones.

Instrucciones

1 Añadir el archivo de biblioteca stdarg.h en su programa. Ahí es donde se definen las macros. En la primera línea del archivo, insertar #include <stdarg.h>.

2 Utilizar las macros va_arg va_start y v_end que colaboran con la va_type en stdarg.h.

3 Establecer una variable de tipo va_list para funcionar como un marcador de la lista.

4 Acceder 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 desea que recuperar para suministrar el número correcto de bytes de la pila.

5 Emitir el resultado del paso 4 al tipo que quiere que sea.

6 Llamar a la macro va_end para poner fin al procesamiento de los parámetros variables.

7 Mira el siguiente ejemplo que demuestra los pasos 2 a 6. myprintf función acepta una cadena de formato que especifica el tipo y la posición de cada argumento. Siguiendo la cadena de formato es la lista de argumentos. La función imprime los argumentos. Por simplicidad sólo puede procesar int, float y Char:

// declaración

myprintf vacío (formato char, ...);

// Defintion

myprintf vacío (formato char, ...) {

vl va_list;

int i;

va_start (VL, args);

for (i = 0; args [i] = '\ 0';! i ++) {

any_t union {

int i;

flotar f;

c carbón;

} alguna;

if (args [i] == 'i') {

any.i = va_arg( vl, int );<br>
printf( "%i\n", any.i );<br>

}más

si (args [i] == 'f') {

any.f = va_arg( vl, float );<br>
printf( "%f\n", any.f );<br>

}más

if (args [i] == 'c') {

any.c = va_arg( vl, char );<br>
printf( "%c\n", any.c );<br>

}

más{

tirar SomeException;

}

va_end (VL);

}