Protótipo de função

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa

Um protótipo de função, nas linguagens de programação C e C++, é uma declaração de uma função que omite o corpo mas especifica o seu nome, aridade, tipos de argumentos e tipo de retorno. Enquanto a definição da função especifica o que ela faz, um protótipo de função pode ser entendido como a especificação da sua interface. O conceito de protótipo de função foi proposto originalmente na linguagem C++ e foi adotado posteriormente no padrão ANSI C da linguagem C.[1] [2]

Exemplo[editar | editar código-fonte]

Como um exemplo, pode-se considerar o seguinte protótipo de função:

int fac(int n);

Este protótipo especifica que neste programa, existe uma função de nome "fac" que utiliza um único parâmetro "n" que está declarado como tipo inteiro "int". A definição da função precisa ser disponibilizada para que a função possa ser utilizada.

Usos[editar | editar código-fonte]

Informando o compilador[editar | editar código-fonte]

Se a função não for declarada previamente e o seu nome ocorre em alguma expressão seguida de um parêntese ("( "), ela é declarada implicitamente como uma função sem nenhum argumento que retorna um int. Neste caso, quando a função é aplicada a algum argumento, o compilador não será capaz de realizar uma verificação, em tempo de compilação, dos tipos dos argumentos e da aridade. A impossibilidade de verificar o uso correto de uma função comumente implica a ocorrência de erros.

#include <stdio.h>

/* 
 * Se o protótipo é disponibilizado, o compilador irá detectar o erro 
 * na função main(). Se ele é omitido, o erro não será notificado.
 */
int fac(int n);              /* Protótipo da função */

int main() {                 /* Chamada da função */
    printf("%d\n", fac());   /* ERRO: falta um argumento na chamada de fac */
    return 0;
}

int fac(int n) {             /* Função chamada  */
    if (n == 0) {
        return 1;
    }
    else {
        return n * fac(n - 1);
    }
}

A função "fac" espera que um argumento inteiro esteja na sua pilha de execução quando é chamada. Se o protótipo é omitido, o compilador não terá como garantir a presença do argumento e a função "fac" acabará operando sobre algum outro dado existente na pilha (possivelmente um código de retorno) ou um valor de alguma variável que não está no escopo corrente. Incluindo o protótipo da função, o programador informa ao compilador que a função "fac" obtém um inteiro como argumento e permite que o compilador avise a ocorrência desse tipo de erro.

Criação de interfaces de biblioteca[editar | editar código-fonte]

Através da utilização de protótipos de função em arquivos de cabeçalho (normalmente, em programas escritos na linguagem C, em arquivos com a extensão ".h") é possível especificar interfaces para bibliotecas de software.

Declarações de classe[editar | editar código-fonte]

Na linguagem C++, os protótipos de função são também utilizados em declarações de classe.

Referências

  1. Peter Stephenson. C++ versus C - Function Prototypes (em inglês). Visitado em 11 de julho de 2007.
  2. Ian Foster. CC++ Introduction (em inglês). Visitado em 11 de julho de 2007.

Bibliografia[editar | editar código-fonte]

Ver também[editar | editar código-fonte]