Universidad Carlos III de Madrid

Grado en Ing. Telemática/Sist. Audiovisuales/Sist. de Comunicaciones

Arquitectura de Sistemas

Septiembre 2012 - Enero 2013

3. Prototipos de funciones

Como el compilador trabaja sólo con la información contenida en un único fichero, a menudo es preciso informar al compilador de que en otro fichero existe una función. Esto se consigue insertando, en lugar de la definición de la función (que ya está presente en otro fichero), su prototipo. El prototipo de una función es una línea similar a la primera de su declaración: tipo del resultado, seguido del nombre de la función y de la lista de tipos de datos de los parámetros separados por comas y rodeados por paréntesis. Toda función que se invoca debe ir precedida o de su definición o de su prototipo. La definición y el prototipo de la función pueden estar presentes en el mismo fichero. El siguiente ejemplo ilustra esta situación:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/* Prototipo */
int addition(int, int);
/* Función principal */
int main() 
{
    int i, j;

    i = 10;
    j = 20;
    /* Invocación de la función */
    i += addition(i, j);
}
/* Definición de la función */
int addition(int a, int b) 
{
    return (a + b);
}

Sugerencia

Copia y pega el ejemplo anterior en un fichero de texto en tu entorno de desarrollo y compila el programa con el comando gcc -Wall -o programa fichero.c reemplazando fichero.c por el nombre del fichero que hayas utilizado. Si el compilador no imprime ningún mensaje quiere decir que el programa es sintácticamente correcto. Prueba a quitar el prototipo de la línea 2 y compila de nuevo. Si mueves la definición de la función que comienza en la línea 14 al principio del fichero, ¿necesitas el prototipo? ¿qué pasa si aún así lo incluyes? ¿qué sucede si la función y el prototipo no coinciden en el tipo de los parámetros o el tipo del resultado?