Prototipo de función

De Wikipedia, la enciclopedia libre

En programación, un prototipo de función o interfaz de función es una declaración de una función que especifica el nombre de la función y su signatura (aridad, tipo de datos de los parámetros y tipo del retorno), pero omite el cuerpo de la función. Mientras que el código de una función define "cómo" hace lo que hace (su "implementación"), un prototipo de función simplemente expresa su interfaz, es decir, "qué" tipos de datos entran y salen de ella. El término "prototipo de función" se utiliza particularmente en el contexto de los lenguajes de programación C y C++, donde emplear declaraciones anticipadas de funciones en archivos de cabecera permite dividir un programa en unidades de traducción, es decir, en partes que un compilador puede traducir por separado en archivos de objetos, para ser combinados por un enlazador en un fichero ejecutable o una librería. La declaración de la función precede a la definición de la función y brinda detalles de su nombre, tipo de retorno y clase de almacenamiento junto con otros atributos relevantes.[1]

Los prototipos de funciones se pueden utilizar cuando:[2]

  • Se desea definir un tipo externo
  • Creación de una parte de interfaz

En un prototipo, los nombres de los parámetros son opcionales (y en C/C++ tienen el prototipo de función ámbito, lo que significa que su alcance termina al final del prototipo). Sin embargo, el tipo es necesario junto con todos los modificadores (por ejemplo, si es un puntero o un referencia a un parámetro constante) excepto constantes en solitario.

En programación orientada a objetos, las interfaces y los métodos abstractos tienen prácticamente el mismo propósito.

Ejemplo[editar]

Considérese el siguiente prototipo de función:

void Sum( int a, int b );

O

void Sum( int, int );

O

auto Sum( int, int ) -> void; // C++ only

Los prototipos de funciones incluyen la signatura de la función, el nombre de la función, el tipo de retorno y el especificador de acceso. En este caso el nombre de la función es "Suma". La signatura de la función define el número de parámetros y sus tipos. El tipo de devolución es "nulo". Esto significa que la función no devolverá ningún valor. Téngase en cuenta que los nombres de los parámetros en el primer ejemplo son opcionales.

Usos[editar]

En las primeras versiones de C, si una función no se había declarado previamente y su nombre aparecía en una expresión seguida de un paréntesis izquierdo, se declaraba implícitamente como una función que devuelve un int y no se suponía nada sobre sus argumentos. En este caso, el compilador no podría realizar la verificación de validez en tiempo de compilación del número y tipo(s) de argumentos. El estándar C99 requiere el uso de prototipos.

char MyFunction ( int a ); /* Function prototype */

#include <stdio.h>
#include <limits.h> 
int main( void ) 
{

  putchar( MyFunction( -1 ) );   /* Llamada correctamente formateada */

  putchar( MyFunction( 1.5 ) );  /* El compilador genera una advertencia debido a una discrepancia de tipos */

  putchar( MyFunction("IncorrectArgType") ); /* El compilador generará una advertencia */

  putchar( MyFunction() );     /* El compilador generará el error: con muy pocos argumentos */
  
  int one=1;
  putchar( MyFunction( INT_MAX + one ) ); /* Aunque se suma 1 al entero máximo
                                        /* es un error que no se puede detectar en tiempo de compilación */
  return 0;
}

char MyFunction( int n )  /* Definición de la función */
{
  if (n > 0)   return '>';
  if (n < 0)   return '<'; 
  return '=';
}

La función MyFunction espera ser llamada con un argumento entero. Al incluir el prototipo de función, informa al compilador que la función toma un argumento entero y permite que el compilador detecte llamadas especificadas incorrectamente.

Creando interfaces de biblioteca[editar]

Al colocar prototipos de funciones en un fichero cabecera, se puede especificar una interfaz para una biblioteca.

Declaración de clase[editar]

En C++, los prototipos de funciones también se utilizan en las definiciones de clase.

Véase también[editar]

Referencias[editar]

  1. TylerMSFT (25 de enero de 2023). «Function Prototypes». learn.microsoft.com (en inglés estadounidense). Consultado el 9 de agosto de 2023. 
  2. «Function prototypes». www.ibm.com (en inglés estadounidense). 25 de octubre de 2018. Consultado el 9 de agosto de 2023. 

Bibliografía[editar]