C como lenguaje fue diseñado hace mucho tiempo, cuando los compiladores estaban muy restringidos en el tiempo de cálculo. Muchas de sus opciones de diseño existen para hacer que los compiladores sean más fáciles de escribir, dadas las limitaciones informáticas de la época.
Los prototipos son uno de esos ejemplos. La razón principal por la que existen es para que el compilador pueda pasar por el programa exactamente una vez, sabiendo qué funciones están dentro del alcance en un momento dado. Para hacer esto, las funciones tendrían que declararse antes de ser utilizadas; Los prototipos le permiten declarar una función sin implementar su cuerpo hasta más tarde. Si no hubiera forma de hacerlo, sería realmente complicado escribir código donde, por ejemplo, dos funciones se referencian entre sí.
Esto es adicionalmente complicado, y más importante, por el modelo C elegido para su preprocesador. En esencia, no existe un sistema de módulos real; en cambio, todos los archivos que usa se concatenan en un gran programa en C que se pasa al compilador. Para que esto funcione correctamente y para permitir la compilación por separado, entre otras cosas, C necesita un sistema de archivos de encabezado que especifique cómo llamar a algún código, pero no el código en sí. ¡Esto es exactamente lo que hacen los prototipos de funciones!
Entonces, la historia final es que es una peculiaridad histórica. La mayoría de los lenguajes modernos que no se basan directamente en C han omitido tanto los prototipos de funciones como los archivos de encabezado, por lo que ciertamente no es algo que realmente necesite.
- ¿Cómo son las funciones de cálculo de datos de BIRT? ¿Jasper es mejor que eso?
- ¿Por qué algunas funciones pueden integrarse en una asíntota, pero no otras?
- ¿Cuáles son las funciones matemáticas de Excel?
- ¿Cuáles son las funciones financieras del lenguaje R?
- ¿La integral de una función par siempre tiene que ser una función impar?