Mas, muitas vezes, não poderemos nos dar ao luxo de escrever nesta ordem. Muitas vezes teremos o nosso programa espalhado por vários arquivos. Ou seja, estaremos usando funções em um arquivo que serão compiladas em outro arquivo. Como manter a coerência?
A solução são os protótipos de funções. Protótipos são nada mais, nada menos, que declarações de funções. Isto é, você declara uma função que irá usar. O compilador toma então conhecimento do formato daquela função antes de compilá-la. O código correto será então gerado. Um protótipo tem o seguinte formato:
tipo_de_retorno nome_da_função (declaração_de_parâmetros);
onde o tipo-de-retorno, o nome-da-função e a declaração-de-parâmetros são os mesmos que você pretende usar quando realmente escrever a função. Repare que os protótipos têm uma nítida semelhança com as declarações de variáveis. Vamos implementar agora um dos exemplos da seção anterior com algumas alterações e com protótipos:
#include <stdio.h> float Square (float a); main () { float num; printf ("Entre com um numero: "); scanf ("%f",&num); num=Square(num); printf ("\n\nO seu quadrado vale: %f\n",num); } float Square (float a) { return (a*a); }Observe que a função Square() está colocada depois de main(), mas o seu protótipo está antes. Sem isto este programa não funcionaria corretamente.
Usando protótipos você pode construir funções que retornam quaisquer tipos de variáveis. É bom ressaltar que funções podem também retornar ponteiros sem qualquer problema. Eles não só ajudam o compilador. Eles ajudam a você também. Usando protótipos o compilador evita erros, não deixando que o programador use funções com os parâmetros errados e com o tipo de retorno errado, o que já é uma grande ajuda.