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.