CUESTIÓN
¿Por qué a la llamada al sistema execl
hay que ponerle NULL
como último
parámetro? Me parece una bobería.
SOLUCIÓN
execl
pertenece a un grupo de funciones en C que
admite un número variable de parámetros. Otro ejemplo muy clásico
de este tipo de funciones es printf
.
Son funciones de C normal, nada de C++, sobrecarga o similares.
Su prototipo se deja libre indicando un primer parámetro, una
coma y puntos suspensivos (...).
Este primer parámetro puede usarse para que la función sepa
de un modo u otro con cuántos parámetros se ha llamado a la
función es estos momentos. En el caso de printf
,
viendo la cadena de formato sabemos cuántos parámetros y de qué
tipo vienen a continuación. También puede ser simplemente un
entero que indique cuántos parámetros vienen después.
Lo que es cierto es que en C estándar no existe ninguna manera
en que una función puede saber cuántos parámetros está recibiendo
y de qué tipo son. En el caso de execl
en vez de
indicar cuántos parámetros lleva en un momento dado, lo que se
hace es poner NULL
al final de todos.
Una consecuencia adicional de esto es que si queremos pasar
un array de tamaño variable a una función, la función no
sabrá cuántos elementos tiene el array y deberemos usar un
parámetro adicional para indicarlo. Como los búfferes son
arrays de tipo carácter, también debemos indicar en la mayor
parte de llamadas al sistema el tamaño del búffer que le
proporcionamos.
Para los que estéis interesados en las funciones de un número
variable de argumentos en C, podéis consultar la página de
manual del fichero de cabecera stdarg
.
© 2002 Guillermo González Talaván.