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 del modo en que está construido C a bajo
nivel 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.