Cuando se declara una función, se está avisando al compilador que más adelante encontrará la definicion de tal función, y que por el momento, tome nota de las características de ella, como son: el tipo de dato que retorna, su nombre y los tipos de argumentos que va a recibir. Con esto, no habrá ningún problema en invocar a la función en un bloque de programa ubicado antes del lugar donde se encuentra escrita su definición.
En el ejemplo 4.1, las líneas:
void saludo();
float calcula(float);
representan la declaración de las funciones ó la declaración de los prototipos de las funciones saludo() y calcula().
En la declaración de la función saludo() se especifica que no va a retornar valor alguno, y que no recibirá argumentos.
En la declaración de la función calcula() se especifica que va a retornar un valor de tipo float, y que va recibir un argumento de tipo float.
Es importante observar que la declaración de una función es parecida a la línea de encabezado de su definición , sólo que en el caso de la declaración se escribe un punto y coma al final.
También cabe hacer notar que en la declaración no se requiere escribir identificadores para los argumentos, como se observa en el ejemplo 4.1, sino que basta con incluir los tipos de datos de los argumentos. Se pueden incluir identificadores de argumentos, sólo que el ámbito de tales identificadores estará restringido a la declaración de la función correspondiente.
Por lo tanto, la declaración:
float calcula(float); podría haberse escrito así :
float calcula(float arg);
En este caso, el identificador arg no tiene uso alguno; por lo que es innecesaria su inclusión.
Si el número de argumentos, o los tipos correspondientes no coinciden entre la declaración y la línea de encabezado de la definición de la función el compilador marcará un error.