Foro con Clase C/C++
Como saber el numero de argumentos pasados a una función...
Manu Exposito
Nº de hilos:6
Nº de mensajes:14
domingo, 21 de febrero de 2021
Hola Salvador tengo una nueva pregunta para ti.
Tengo una función que recibe varios parámetros de tipo cadena, el prototipo es este:
void writeLog( const char *zStr, ... )
Como puedo saber en numero de argumentos para escribirlos en un fichero con un "for" o con un "while"
Salvador Pozo
Nº de hilos:0
Nº de mensajes:25
lunes, 22 de febrero de 2021
Hola:
No existe un método estándar para calcular el número de elementos en funciones con número de elementos variable. Estos parámetros se pasan en la pila, y se desconocen sus valores y cantidad hasta que se leen, y, si no se diseña un método para hacerlo, incluso aunque se lean.
En el curso, http://conclase.net/c/curso/cap20#PAR_VAR_LEER, se proponen varias formas de detectar el número de parámetros.
Básicamente hay dos formas:
- Usar uno de los parámetros antes de los puntos suspensivos como contador, que indique el número variable de parámetros que se están pasando. Ese es el método que usa, por ejemplo, la función main.
- Usar un valor predeterminado para indicar el último parámetro pasado, análogo al nulo terminador de las cadenas de caracteres.
En cualquiera de los dos casos será el programador el encargado de que los valores sean coherentes. Es decir, en el primer caso, que la cuenta sea correcta, y en el segundo que sólo el último valor de la lista tome el valor predeterminado.
Funciones como printf usan un tercer método, que es una variante del primero. En el parámetro conocido que indica el formato de la cadena de salida aparecen algunas cadenas que empiezan con el carácter '%'. Por cada una de ellas, la función espera un parámetro en la lista de parámetros variable. Pero incluso en ese caso es fácil verificar que si se pasan menos parámetros de los esperados, el programa no funciona y si se pasan más, aunque normalmente no hay consecuencias, no se garantiza la estabilidad del programa. De nuevo es el programador que use estas funciones el responsable de pasar el número correcto de parámetros.
Hasta pronto.
Manu Exposito
Nº de hilos:6
Nº de mensajes:14
lunes, 22 de febrero de 2021
Como siempre, muchísimas gracias Salvador. Eres un Pozo de conocimiento, si no existieras habría que programarte.
"Tú eres mi única constante en este mundo de variables".
Ahora en serio, muchas gracias de nuevo.