Un prototipo de función en C o C++ es una declaración de función que no contiene un cuerpo de función, pero especifica el nombre de la función, la aridad , los tipos de argumento y el tipo de datos de retorno. Mientras que una definición de función describe lo que hace una función, un prototipo de función puede considerarse como una descripción de su interfaz.
En el prototipo, los nombres de los argumentos son opcionales, sin embargo, el tipo debe especificarse junto con cualquier modificador (por ejemplo, si es un puntero o un argumento constante).
Como ejemplo, considere el siguiente prototipo de función:
int foo ( int n );Este prototipo declara una función llamada "foo" que toma un argumento "n" de tipo entero y devuelve un entero. La definición de una función se puede colocar en cualquier parte del programa, pero la declaración solo se requiere si se usa.
Si una función no ha sido declarada previamente y su nombre aparece en una expresión seguida inmediatamente por un paréntesis de apertura, entonces se declara implícitamente como una función que devuelve un resultado de tipo inty no se asume nada sobre sus argumentos. En este caso, el compilador no podrá realizar la verificación del tipo de argumento ni la aridad cuando se llame a la función con algunos argumentos. Esta es una fuente potencial de problemas. El código siguiente ilustra una situación en la que el comportamiento de una función declarada implícitamente no está definido.
#incluir <stdio.h> /* * Al implementar este prototipo, el compilador emitirá un mensaje de error * en main(). Si se omite, no habrá ningún mensaje de error. */ int foo ( int n ); /* Función prototipo */ int main ( void ) /* Llamada de función */ { printf ( "%d \n " , foo ()); /* ERROR: ¡a foo le falta un argumento! */ devolver 0 ; } int foo ( int n ) /* Función a llamar */ { si ( n == 0 ) devuelve 1 ; de lo contrario, devuelve n * foo ( n - 1 ); }La función "foo" espera un argumento de tipo entero que está en la pila cuando se llama. Si se omite el prototipo, el compilador no puede procesarlo y "foo" terminará en otros datos de la pila (probablemente la dirección de retorno o el valor de una variable fuera de rango ). Al incluir un prototipo de función, le informa al compilador que la función "foo" toma un único argumento de tipo entero y permite que el compilador maneje este tipo de errores.
Al colocar prototipos de funciones en un archivo de encabezado , puede definir una interfaz para .
En C++, los prototipos de funciones también se utilizan en las definiciones de clase .